一、Numpy 属性
# 列表转化为矩阵
In [2]: arr = np.array([[1,2,3],[4,5,6]]) In [3]: arr Out[3]: array([[1, 2, 3], [4, 5, 6]])
1,维度 ndim
In [7]: arr.ndim Out[7]: 2
2,行数和列数 shape
In [8]: arr.shape Out[8]: (2, 3)
3,元素个数 size
In [8]: arr.shape Out[8]: (2, 3)
二,创建array
1,创建数组
In [10]: arr = np.array([[1,2,3],[4,5,6]]) In [11]: arr Out[11]: array([[1, 2, 3], [4, 5, 6]])
2,创建数组并指定类型
In [12]: arr = np.array([[1,2,3],[4,5,6]],dtype=int) In [13]: arr Out[13]: array([[1, 2, 3], [4, 5, 6]]) In [14]: arr = np.array([[1,2,3],[4,5,6]],dtype=float) In [15]: arr Out[15]: array([[ 1., 2., 3.], [ 4., 5., 6.]])
3,创建数据全为0的数组 np.zero((行,列))
In [16]: arr = np.zeros((3,4)) In [17]: arr Out[17]: array([[ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.]])
4,创建数据全为1的数组 np.ones((行,列))
In [18]: arr = np.ones((3,4)) In [19]: arr Out[19]: array([[ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.]])
5,创建数组接近0的数组 np.empty((行,列))
6,按照指定范围创建数组 np.arange(开始,结束,步长)
In [24]: arr = np.arange(10,50,2) In [25]: arr Out[25]: array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48])
In [28]: arr = np.arange(10,50,2).reshape(4,5) # 通reshape改变数据形状 In [29]: arr Out[29]: array([[10, 12, 14, 16, 18], [20, 22, 24, 26, 28], [30, 32, 34, 36, 38], [40, 42, 44, 46, 48]])
7,创建线段
In [31]: np.linspace(1,20,5)
Out[31]: array([ 1. , 5.75, 10.5 , 15.25, 20. ])
三,运算
In [38]: a = np.array([10,20,30,40]) # 创建a In [39]: b = np.arange(4) # 创建b In [40]: b-a # 相减 Out[40]: array([-10, -19, -28, -37]) In [41]: b+a # 相加 Out[41]: array([10, 21, 32, 43]) In [42]: b*a # 乘法 Out[42]: array([ 0, 20, 60, 120]) In [43]: a**2 # 平方 Out[43]: array([ 100, 400, 900, 1600])
In [46]: a<11 # 判断,返回值为布尔
Out[46]: array([ True, False, False, False], dtype=bool)
In [49]: a # 创建a Out[49]: array([[1, 2], [2, 3]]) In [50]: b = np.arange(4).reshape(2,2) # 创建b In [51]: b Out[51]: array([[0, 1], [2, 3]]) In [52]: a*b # 对应元素相乘 Out[52]: array([[0, 2], [4, 9]]) In [53]: np.dot(a,b) # 标准的矩阵乘法计算 Out[53]: array([[ 4, 7], [ 6, 11]])
In [64]: a=np.random.random((2,4)) # 产生一个2行4列的矩阵,数值在0到1之间 In [65]: np.sum(a) # 矩阵的和 Out[65]: 4.4227580588680375 In [66]: np.min(a) # 矩阵的最小值 Out[66]: 0.16635521270028986 In [67]: np.max(a) # 矩阵的最大值 Out[67]: 0.78738798170221957
In [76]: a = np.arange(1,10) # 产生一个数组a In [77]: np.argmax(a) # 数组a的最大值 Out[77]: 8 In [78]: np.argmin(a) # 数组a的最小值 Out[78]: 0 In [79]: np.mean(a) # 数组a的平均值 Out[79]: 5.0 In [80]: np.median(a) # 数组a的中位数 Out[80]: 5.0 In [81]: np.diff(a) # 数组中后一个元素和前一个元素的差值,新组成的一个数组 Out[81]: array([1, 1, 1, 1, 1, 1, 1, 1]) In [82]: np.cumsum(a) # 数组中,第i项和第i-1项的和赋值给i项 Out[82]: array([ 1, 3, 6, 10, 15, 21, 28, 36, 45]) In [83]: np.average(a)# 数组a的平均数 Out[83]: 5.0
In [92]: a = np.arange(10,0,-1).reshape(2,5) # 创建一个2行5列的数组a,值从10到0,每次递减一个 In [93]: a Out[93]: array([[10, 9, 8, 7, 6], [ 5, 4, 3, 2, 1]]) In [94]: np.sort(a) # 对数组的每一行进行排序 Out[94]: array([[ 6, 7, 8, 9, 10], [ 1, 2, 3, 4, 5]]) In [95]: np.transpose(a) # 转置数组a Out[95]: array([[10, 5], [ 9, 4], [ 8, 3], [ 7, 2], [ 6, 1]]) In [96]: a.T # 转置数组a Out[96]: array([[10, 5], [ 9, 4], [ 8, 3], [ 7, 2], [ 6, 1]]) In [97]: np.clip(a,5,8) # 将数组中元素值比5小的值赋为5,元素值比8大的值赋为8 Out[97]: array([[8, 8, 8, 7, 6], [5, 5, 5, 5, 5]])
四,通过索引取元素
In [98]: a # 数组a Out[98]: array([[10, 9, 8, 7, 6], [ 5, 4, 3, 2, 1]]) In [99]: a[0] # 取数组a的第1行 Out[99]: array([10, 9, 8, 7, 6]) In [100]: a[0][0] # 取数组a的第一行的第一个元素 Out[100]: 10 In [101]: a[0,0] # 取数组a的第一行的第一个元素的另一种写法 Out[101]: 10 In [102]: a[0,1:3]# 取数组a的第一行的,第2列到第3列 Out[102]: array([9, 8]) In [103]: a.flatten() # 将多维的矩阵转换为一行的矩阵 Out[103]: array([10, 9, 8, 7, 6, 5, 4, 3, 2, 1])
五、合并
In [110]: a # 数组a Out[110]: array([1, 1, 1]) In [111]: b # 数组b Out[111]: array([2, 2, 2]) In [112]: np.vstack((a,b)) # 上下合并 Out[112]: array([[1, 1, 1], [2, 2, 2]]) In [113]: np.hstack((a,b))# 左右合并 Out[113]: array([1, 1, 1, 2, 2, 2])
六、分割
1,等量分割 np.split()
1.1,按行分割
In [138]: a # 3行4列的数组a Out[138]: array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) In [139]: np.split(a,1,axis=0) # 将数组a按行进行分割,一行一组。如果此时将参数改为(a,2,axis=0)是不行的,因为是等量分割,前两行为一项,后一行为一项是不等量的 Out[139]: [array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])] In [140]: np.split(a,3,axis=0)# 将数组a按行进行分割,三行一组 Out[140]: [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
1.2,按列分割
In [133]: a # 3行4列的数组a Out[133]: array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) In [134]: np.split(a,2,axis=1) # 将数组a,按照列分割,2列一组。如果现在参数是(a,3,axis=1)这样是不行的,因为进行的是等量分割,前三列为一项,只剩下一项不是等量的。 Out[134]: [array([[0, 1], [4, 5], [8, 9]]), array([[ 2, 3], [ 6, 7], [10, 11]])]
2,不等量分割 np.array_split()
In [144]: a # 3行4列的数组a Out[144]: array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) In [145]: np.array_split(a,3,axis=1) # 按照列进行不等量的分割 Out[145]: [array([[0, 1], [4, 5], [8, 9]]), array([[ 2], [ 6], [10]]), array([[ 3], [ 7], [11]])] In [146]: np.array_split(a,2,axis=0)# 按照行进行不等量的分割 Out[146]: [array([[0, 1, 2, 3], [4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
3,其他分割
In [147]: np.vsplit(a,1) # 等同于np.split(a,1,axis=0) Out[147]: [array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])] In [148]: np.hsplit(a,2) # 等同于np.aplit(a,2,axis=1) Out[148]: [array([[0, 1], [4, 5], [8, 9]]), array([[ 2, 3], [ 6, 7], [10, 11]])]
七、赋值和拷贝
In [149]: a # 创建3行4列数组a Out[149]: array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) In [150]: b = a # 创建数组b,将a的值赋给b In [151]: a[0][0]=111 # 改变a[0][0]的值为111 In [152]: b[0][0]==111# 这时,b的值也会变为111 Out[152]: True In [153]: c=b.copy() # 创建数组c,值为b的值,通过copy的方式
In [157]: b[0][0]=222 # 将b[0][0]的值改为222
In [158]: c[0][0]==222# 这时,c[0][0]还是没有改变
Out[158]: False
In [159]: c[0][0]
Out[159]: 111