numpy的常用方法5-5
numpy的常用函数
e的次方和n的开根号
B = np.arange(3) print(np.exp(B)) #e的n次方 print(np.sqrt(B)) #对n开几次方 #结果 [1. 2.71828183 7.3890561 ] #e^0,e^1,e^2 [0. 1. 1.41421356] #0^(1/2),1^(1/2),2^(1/2)
向下取整的floor
np.floor(10*np.random.random([10,10])) #random在(0,1),向下取整 array([[8., 8., 7., 5., 5., 8., 2., 0., 4., 6.], [8., 8., 3., 5., 7., 6., 7., 1., 7., 7.], [7., 3., 9., 1., 0., 0., 6., 8., 8., 8.], [8., 9., 8., 5., 2., 8., 6., 1., 6., 1.], [7., 8., 0., 8., 1., 6., 8., 9., 3., 4.], [5., 5., 7., 0., 3., 0., 3., 3., 3., 1.], [0., 0., 7., 4., 9., 2., 4., 6., 2., 5.], [9., 9., 4., 3., 4., 1., 7., 6., 5., 4.], [6., 6., 7., 7., 1., 8., 7., 2., 8., 9.], [6., 7., 3., 8., 2., 1., 3., 8., 0., 7.]])
把矩阵变成向量的形式 ravel函数
np.ravel( np.floor(10*np.random.random([10,10])) ) #结果 array([9., 5., 4., 1., 1., 6., 3., 7., 3., 7., 6., 4., 9., 1., 9., 6., 4., 1., 5., 9., 9., 8., 5., 1., 6., 3., 0., 4., 7., 3., 1., 3., 9., 9., 1., 1., 9., 7., 5., 1., 6., 9., 3., 2., 3., 8., 2., 1., 1., 7., 5., 9., 2., 4., 7., 2., 8., 0., 5., 8., 2., 7., 5., 5., 7., 8., 7., 2., 4., 9., 8., 1., 0., 5., 5., 4., 5., 4., 8., 7., 1., 2., 2., 0., 6., 8., 9., 8., 4., 3., 3., 2., 0., 6., 8., 6., 3., 3., 6., 7.])
矩阵列合并和行合并
a= (np.floor(10*np.random.random([2,2]))) #array([[3., 6.], [9., 4.]]) b= (np.floor(10*np.random.random([2,2]))) #array([[4., 5.],[7., 9.]]) np.vstack((a,b)) #对矩阵上下相接 #结果 array([[3., 6.], [9., 4.], [4., 5.], [7., 9.]]) np.hstack((a,b)) #对矩阵左右相接 #结果 array([[3., 6., 4., 5.], [9., 4., 7., 9.]])
矩阵的分割
a=array([[3., 2., 2.], [8., 5., 7.], [8., 5., 0.]]) np.hsplit(a,3) #按照列分割成3块 #结果 [array([[3.], [8.],[8.]]), array([[2.],[5.],[5.]]), array([[2.],[7.],[0.]])] np.hsplit(a,(1,2)) #在0,1,2 在1的前面切一刀和2的前面切一刀 #结果 [array([[3.], [8.], [8.]]), array([[2.], [5.], [5.]]), array([[2.], [7.], [0.]])] np.vsplit(a,3)#按列切分 #结果 [array([[3., 2., 2.]]), array([[8., 5., 7.]]), array([[8., 5., 0.]])]
拷贝和引用的问题
a = np.arange(20) #b,a 是同一块内存地址的名字,如果改了a等于改b b = a print(b is a) b.shape = 4,5 print(a) print(id(a)) print(id(b)) #结果 True [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14] [15 16 17 18 19]] 4502961328 4502961328
c = a.view() #浅拷贝 估计用的是统一块数据但是不同的变量地址指向的 所以 ID不同 不推荐使用 print(c is a) c.shape = 5,4 print(a.shape) c[0,3] = 1234 print(a) print(c) print(id(a)) print(id(c)) #结果 False (4, 5) [[ 0 1 2 1234 4] [ 5 6 7 8 9] [ 10 11 12 13 14] [ 15 16 17 18 19]] [[ 0 1 2 1234] [ 4 5 6 7] [ 8 9 10 11] [ 12 13 14 15] [ 16 17 18 19]] 4502961328 4503152160
d = a.copy() #深拷贝 只把数据复制过来 d is a d[0,0] = 999 print(d) print(a) #结果 [[ 999 1 2 1234 4] [ 5 6 7 8 9] [ 10 11 12 13 14] [ 15 16 17 18 19]] [[ 0 1 2 1234 4] [ 5 6 7 8 9] [ 10 11 12 13 14] [ 15 16 17 18 19]]
numpy按列或者是按行查找最大值的索引
ma = np.random.random([3,4]) print(ma) #结果: [[0.14437194 0.88272108 0.94192143 0.27782676] [0.60407714 0.15106346 0.56248315 0.00709065] [0.11396868 0.10363129 0.15044116 0.77020605]] ma.argmax(axis = 0) #axis 列指向 #结果 array([1, 0, 0, 2]) #ma矩阵一共有四列,那么第一列当中最大值在1的位子,一次类推。 axis = 1指的是行
tile填充
a = np.arange(0,20,10) b = np.tile(a,(3,5)) #将向量填充到矩阵b中的每一个元素 print(b) #结果 array([[ 0, 10, 0, 10, 0, 10, 0, 10, 0, 10], [ 0, 10, 0, 10, 0, 10, 0, 10, 0, 10], [ 0, 10, 0, 10, 0, 10, 0, 10, 0, 10]])

浙公网安备 33010602011771号