sort方法使用,对于多维数据可以指定对指定轴排序,默认是最里面一层数据排序
In [8]: arr = np.random.randn(3,2,2)
In [9]: arr
Out[9]:
array([[[ 1.17120187, 1.46243415],
[ 1.03303677, 0.046324 ]],
[[ 0.54480189, -1.53867658],
[-2.71762905, -0.8470151 ]],
[[-0.8524279 , -1.50170625],
[-0.32525088, 0.33931581]]])
In [10]: arr.sort()#等价于arr.sort(axis = 2) 默认对最内层排序
In [11]: arr
Out[11]:
array([[[ 1.17120187, 1.46243415],
[ 0.046324 , 1.03303677]],
[[-1.53867658, 0.54480189],
[-2.71762905, -0.8470151 ]],
[[-1.50170625, -0.8524279 ],
[-0.32525088, 0.33931581]]])
In [12]: arr.sort(axis = 1)#对第二维的数据排序
In [13]: arr
Out[13]:
array([[[ 0.046324 , 1.03303677],
[ 1.17120187, 1.46243415]],
[[-2.71762905, -0.8470151 ],
[-1.53867658, 0.54480189]],
[[-1.50170625, -0.8524279 ],
[-0.32525088, 0.33931581]]])
除了排序外,数组可以使用像集合一样使用交集、并集等
方法 | 描述 |
unique(x) | 计算x的唯一值,并排序 |
intersect1d(x,y) | 计算x和y的交集,并排序 |
union1d(x,y) | 计算x和y的并集,并排序 |
in1d(x,y) | 计算x中的元素是否包含在y中,返回一个布尔值数组 |
setdiff1d(x,y) | 差集,在x中不在y中的x中的元素 |
setxor1d(x,y) | 异或集,在x或y中,但不属于x,y交集的元素 |
In [14]: arr = np.array([5,2,3,5,4,7,-5,3])
In [15]: np.unique(arr)
Out[15]: array([-5, 2, 3, 4, 5, 7])
In [16]: arr2 = np.array([5,2,3,56,20,7])
In [17]: np.intersect1d(arr,arr2)
Out[17]: array([2, 3, 5, 7])
In [18]: np.in1d(arr,arr2)
Out[18]: array([ True, True, True, True, False, True, False, True])
ravle()和flatten()方法的异同
两者都可以将多维数组降维,但是ravel返回的是原数组的视图,即修改返回值,原数组也会变化;而flatten返回的是原数组的拷贝,修改后对原数组无影响。
In [32]: arr = np.random.randn(2,4)
In [33]: arr
Out[33]:
array([[-1.19249445, 0.90393918, 1.40165374, -0.01446315],
[ 0.92437731, -0.04495734, -0.68258786, -1.28977605]])
In [34]: arr_r = arr.ravel()
In [35]: arr_r
Out[35]:
array([-1.19249445, 0.90393918, 1.40165374, -0.01446315, 0.92437731,
-0.04495734, -0.68258786, -1.28977605])
In [36]: arr_r[0] = 120#会修改原数组的值
In [37]: arr
Out[37]:
array([[ 1.20000000e+02, 9.03939180e-01, 1.40165374e+00,
-1.44631494e-02],
[ 9.24377308e-01, -4.49573368e-02, -6.82587861e-01,
-1.28977605e+00]])
In [38]: arr_f = arr.flatten()
In [39]: arr_f
Out[39]:
array([ 1.20000000e+02, 9.03939180e-01, 1.40165374e+00, -1.44631494e-02,
9.24377308e-01, -4.49573368e-02, -6.82587861e-01, -1.28977605e+00])
In [40]: arr_f[2] = 20#不会修改原数组的值
In [41]: arr
Out[41]:
array([[ 1.20000000e+02, 9.03939180e-01, 1.40165374e+00,
-1.44631494e-02],
[ 9.24377308e-01, -4.49573368e-02, -6.82587861e-01,
-1.28977605e+00]])
对于矩阵操作,numpy.linalg提供了矩阵分界的标准函数集,例如求逆矩阵、行列式求解等。具体请参见参考手册
In [53]: arr
Out[53]:
array([[ 1.46806441, 0.19445202, -0.34534805],
[ 0.83256583, 0.61142511, 0.22859295],
[ 0.79464301, 0.64171819, 0.15349091]])
In [54]: np.linalg.inv(arr)#计算逆矩阵
Out[54]:
array([[ 0.63042299, 2.9999192 , -3.04933378],
[-0.64252518, -5.9621098 , 7.43367422],
[-0.57750079, 9.39553691, -8.77701631]])
In [55]: np.linalg.det(arr)#计算行列式的值
Out[55]: -0.08382317146417889
In [57]: np.linalg.eig(arr)#计算特征值和特征向量
Out[57]:
(array([ 1.14805943+0.09782184j, 1.14805943-0.09782184j,
-0.06313842+0.j ]),
array([[ 0.26666976+0.08169649j, 0.26666976-0.08169649j,
0.24891421+0.j ],
[ 0.69570909+0.j , 0.69570909-0.j ,
-0.57205867+0.j ],
[ 0.6619681 +0.00016551j, 0.6619681 -0.00016551j,
0.78153093+0.j ]]))