1,numpy与pandas通过运用矩阵运算来加快运算。 2,如何将py中的数据转化为np中的矩阵:
import numpy as np array=np.array([[1,2,3], [4,5,6]]) print(array) print(array.ndim)#维数 print(array.shape)#形状,返回元组 print(array.size)#元素多少结果如下:
[[1 2 3] [4 5 6]] 2 (2, 3) 63,numpy的基本语句
import numpy as np a=np.array([1,2,3],dtype=int) print(a.dtype) b=np.array([1,2,3],dtype=float) c=np.zeros((2,2))#创建形状为2,2的全0矩阵 print(c) d=np.ones((2,2),dtype=int) print(d) e=np.empty((2,2))#创建接近于0的矩阵 print(e) f=np.arange(10,20,2)#类似于range g=np.arange(1,13).reshape((3,4)) print(g) h=np.linspace(1,10,12).reshape((3,4))#将从1到10等分为12段,包括10 print(h)结果如下:
int32 [[0. 0.] [0. 0.]] [[1 1] [1 1]] [[0. 0.] [0. 0.]] [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] [[ 1. 1.81818182 2.63636364 3.45454545] [ 4.27272727 5.09090909 5.90909091 6.72727273] [ 7.54545455 8.36363636 9.18181818 10. ]] import numpy as np a=np.array([10,20,30]) b=np.arange(3) print(a-b) print(a+b) print(a*b) print(b**2) print(np.sin(a))#将a的值都取sin print(b<1) c=np.ones((4,4)) d=np.arange(16).reshape((4,4)) print(c*d)#数学乘法 print(np.dot(c,d))#矩阵乘法 print(c.dot(d))#另一种写法结果如下:
[10 19 28] [10 21 32] [ 0 20 60] [0 1 4] [-0.54402111 0.91294525 -0.98803162] [ True False False] [[ 0. 1. 2. 3.] [ 4. 5. 6. 7.] [ 8. 9. 10. 11.] [12. 13. 14. 15.]] [[24. 28. 32. 36.] [24. 28. 32. 36.] [24. 28. 32. 36.] [24. 28. 32. 36.]] [[24. 28. 32. 36.] [24. 28. 32. 36.] [24. 28. 32. 36.] [24. 28. 32. 36.]] import numpy as np a=np.ones((4,4)) b=np.arange(16).reshape((4,4)) c=np.random.random((2,4))#在0到1中随机取 print(b) print(np.sum(b,axis=0))#axis必须在sum括号内,0代表列运算,1代表行运算 print(np.sum(b,axis=1)) print(np.min(b))#整个矩阵寻找 print(np.max(b)) print(np.argmin(b))#返回索引值 print(np.argmax(b)) print(np.mean(b)) print(b.mean()) print(np.average(b))#同样为求平均值 print(np.median(b))#求中位值,从小到大排的中间数 print(np.cumsum(b))#逐步求和 print(np.diff(b))#累差 print(np.nonzero(b))#输出非0元素的位置,由两个列表分表行列 print(np.sort(b))#排序 #print(np.transpose(b))#转置 print(b.T)#同样为转置 print(np.clip(b,5,9))#b中小于5的,变为5,大于9的变为9 print((b.T).dot(b))#b转置乘b结果如下:
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] [24 28 32 36] [ 6 22 38 54] 0 15 0 15 7.5 7.5 7.5 7.5 [ 0 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120] [[1 1 1] [1 1 1] [1 1 1] [1 1 1]] (array([0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3], dtype=int64), array([1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64)) [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] [[ 0 4 8 12] [ 1 5 9 13] [ 2 6 10 14] [ 3 7 11 15]] [[5 5 5 5] [5 5 6 7] [8 9 9 9] [9 9 9 9]] [[224 248 272 296] [248 276 304 332] [272 304 336 368] [296 332 368 404]]4,numpy索引
import numpy as np a=np.arange(3,15).reshape(3,4) print(a[2][1],a[2,1])#索引的两种方法 print(a) print(a[:,1])#打印第一列 print(a[2,:])#打印第二行 #迭代每一行 for row in a : print(row) #迭代每一列 for column in a.T: print(column) #迭代每一个元素 for item in a.flat: print(item)结果如下:
12 12 [[ 3 4 5 6] [ 7 8 9 10] [11 12 13 14]] [ 4 8 12] [11 12 13 14] [3 4 5 6] [ 7 8 9 10] [11 12 13 14] [ 3 7 11] [ 4 8 12] [ 5 9 13] [ 6 10 14] 3 4 5 6 7 8 9 10 11 12 13 145,array合并
import numpy as np a=np.array([[1,1,1]]) b=np.array([[2,2,2]]) print(np.vstack((a,b)))#上下合并,不限于两个合并 print(np.hstack((a,b)))#左右合并,不限于两个合并 print(np.concatenate((a,b,b,a),axis=0))#在一维,二维数据上concatenate表现不同,二维上axis=0为上下合并 print(np.concatenate((a,b,b,a),axis=1))#二维上axis=0为左右合并 c=np.array([1,1,1]) print(c[np.newaxis,:])#在前一个位置表示对行添加一个维度 print(c[:,np.newaxis])#在后一个位置表示对列添加一个维度结果如下:
[[1 1 1] [2 2 2]] [[1 1 1 2 2 2]] [[1 1 1] [2 2 2] [2 2 2] [1 1 1]] [[1 1 1 2 2 2 2 2 2 1 1 1]] [[1 1 1]] [[1] [1] [1]]6,array分割
import numpy as np a=np.arange(12).reshape(3,4) print(np.split(a,3,axis=0))#这里axis为0表示按行分割,为1表示按列分割,与前面相反 #print(np.split(a,3,axis=1))无法执行,因为不能做不等分割 print(np.array_split(a,3,axis=1))#可实现不等分割 print(np.vsplit(a,3))#按行分。分为上下 print(np.hsplit(a,2))#按列分。分为左右 [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])] [array([[0, 1], [4, 5], [8, 9]]), array([[ 2], [ 6], [10]]), array([[ 3], [ 7], [11]])] [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])] [array([[0, 1], [4, 5], [8, 9]]), array([[ 2, 3], [ 6, 7], [10, 11]])]7,浅拷贝与深拷贝
import numpy as np a=np.arange(3) b=a c=a d=b print(b) a[1]=11 print(a,d) d[2]=22 print(a,d) #a,b,c,d为同一个对象,所以改变其中一个,另外的都要改变叫浅拷贝 e=a.copy() a[1]=33 print(a) print(e) #e与a互不相关,叫做深拷贝,由a.copy()实现 [0 1 2] [ 0 11 2] [ 0 11 2] [ 0 11 22] [ 0 11 22] [ 0 33 22] [ 0 11 22]