np.arange(int a)
生成一个一维array,元素个数是a个,元素是0到a-1
注意arange不能直接生成多维array
np.arange(int a).reshape(int b,int c)
生成一个一维array,个数为a,然后改成二维数组b*c,b*c=a;也可更多维
reshape与原shape无关,只要总元素个数符合即可
reshape返回的对象实际是原array的一个引用,仅形式不一样,改变一个,两个都会变
np.arange(int a, dtype=np.uint8)
生成一个类型为np.uint8(或其他参数)的一维数组,个数为a
np.arange(a,b)
生成一个array,从a开始,到b以内,间隔为1,浮点数则间隔为1.0
np.arange(a,b,c)
生成一个array,从a开始,到b以内,间隔为c
array的直接赋值不产生新的array
np.zeros()构造一个全0.0的array
np.ones()构造一个全1.0的array
np.full( (tuple shape) , num ) 构造一个全为num的array,大小由shape规定
np.eye( int d )构造一个d维(d*d)的单位矩阵array
1 import numpy as np 2 a = np.array([[1,2,3],[1,2]]) 3 print("a", a) 4 b = a 5 print("b is a? ", b is a) 6 c = np.zeros((3,4)) 7 print("c", c) 8 d = np.ones((3,4),dtype=np.int16) 9 print("d", d)10 e = np.empty((3,4))11 print("e", e)12 f = np.arange(10.1,20.0)13 print("f", f)14 g = np.arange(12).reshape((3,4)).reshape((2,2,3))15 h = g.reshape((3,4))16 h[0][0] = 10017 print("h is g?", h is g)18 print(g)19 i = np.linspace(1,10,19)20 print("i", i)
a [list([1, 2, 3]) list([1, 2])]b is a? Truec [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]d [[1 1 1 1] [1 1 1 1] [1 1 1 1]]e [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]f [10.1 11.1 12.1 13.1 14.1 15.1 16.1 17.1 18.1 19.1]h is g? False[[[100 1 2] [ 3 4 5]] [[ 6 7 8] [ 9 10 11]]]i [ 1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. 5.5 6. 6.5 7. 7.5 8. 8.5 9. 9.5 10. ]
np.array(list l)
用list类型的对象l生成一个新的array
np.array(ndarray l)
用ndarray类型的对象l生成一个新的array
np.asarray(list l)
用list类型的对象l生成一个新的array
np.asarray(ndarray l)
用ndarray类型的对象l生成一个array,但两者是同一个对象
1 a = [0,1,2] 2 b = np.arange(3) 3 c = np.array(a) 4 d = np.array(b) 5 e = np.asarray(a) 6 f = np.asarray(b) 7 a[0] = 1 8 b[0] = 1 9 print(c,d)10 print(e,f)11 print("f is b?", f is b)
[0 1 2] [0 1 2][0 1 2] [1 1 2]f is b? True
a.copy()将a的值copy出来,生成一个新对象
1 a = np.ones((1,3))2 b = a.copy()3 b[0][0] = 04 print(a,b)
[[1. 1. 1.]] [[0. 1. 1.]]
a.ndim
维数
a.shape
形状,几乘几乘几的array
a.size
元素个数
a.dtype
元素类型
1 print(a.ndim)2 print(a.shape)3 print(a.size)4 print(a.dtype)5 print(type(a))
2(2, 3)6float64
基本运算都是对于array内的元素的运算
运算,+-*\&|^等二元运算符运用于两个shape相同的array间,结果是对应位置的元素分别运算
幂次**等运算符结果是每个元素分别进行幂运算
比较运算同样是对每个元素进行操作
np.sin(ndarray a)
np.cos(ndarray a)
np.tan(ndarray a)
1 a = np.arange(2,5)2 b = np.arange(1,4)3 print(a,b)4 print(a+b,a-b,a*b,a/b,a&b,a|b,a^b)5 print(a**3)6 print(a <3)7 print(np.sin(a))
[2 3 4] [1 2 3][3 5 7] [1 1 1] [ 2 6 12] [2. 1.5 1.33333333] [0 2 0] [3 3 7] [3 1 7][ 8 27 64][False False False] [ True False False][ 0.90929743 0.14112001 -0.7568025 ]
np.dot(ndarray a,ndarray b)
a.dot(ndarray b)
对于一维array,效果同向量点积,需满足长度相等
对于高维array,效果为矩阵乘法,需满足矩乘要求
a.transpose()或a.T矩阵转置,对一维array无效
1 a = np.arange(0,6)2 print("1: ", a,a.T)3 print("2: ", a.dot(a))4 a = a.reshape((2,3))5 print("3: ", a)6 print("4: ", a.T)7 print("5: ", a.transpose())8 print("6: ", a.dot(a.T))9 print("7: ", a.T.dot(a))
1: [0 1 2 3 4 5] [0 1 2 3 4 5]2: 553: [[0 1 2] [3 4 5]]4: [[0 3] [1 4] [2 5]]5: [[0 3] [1 4] [2 5]]6: [[ 5 14] [14 50]]7: [[ 9 12 15] [12 17 22] [15 22 29]]
np.random.random(shape)根据shape随机生成array,元素在0到1间
np.median(ndarray a[, axis=0])中位数
np.average(ndarray a[, axis=0])均值
np.diff(ndarray a[, axis=0])差分
a.max([axis=0])
a.min([axis=0])
a.sum([axis=0])
a.cumsum([axis=0])前缀和
a.mean([axis=0])求均值
a.argmax([axis=0])这个函数应该是对于值相同的情况取其中的第一个
np.sort(ndarray a[, axis=0])排序,默认按最高维排序
np.sqrt(ndarray a)对每个元素分别开方
定义axis则对于某一维进行分别运算
1 a = np.random.random((2,5)) 2 print("a", a) 3 print("sum", a.sum()) 4 print("cumsum 1", a.cumsum()) 5 print("cumsum 2", a.cumsum(axis=0)) 6 print("diff", np.diff(a)) 7 print("argmax", a.argmax(axis=0)) 8 print("max", a.max(axis=1)) 9 print("mean", a.mean(axis=1))10 print("median", np.median(a,axis=1))11 print("sort", np.sort(a,axis=0))
a [[0.17921251 0.56586623 0.47136818 0.10203327 0.91359077] [0.79646881 0.30153261 0.06144976 0.46015996 0.61220888]]sum 4.463890979638066cumsum 1 [0.17921251 0.74507874 1.21644692 1.31848019 2.23207096 3.02853977 3.33007238 3.39152214 3.8516821 4.46389098]cumsum 2 [[0.17921251 0.56586623 0.47136818 0.10203327 0.91359077] [0.97568132 0.86739883 0.53281794 0.56219323 1.52579964]]diff [[ 0.38665372 -0.09449805 -0.36933491 0.81155749] [-0.49493621 -0.24008284 0.3987102 0.15204892]]argmax [1 0 0 1 0]max [0.91359077 0.79646881]mean [0.44641419 0.446364 ]median [0.47136818 0.46015996]sort [[0.17921251 0.30153261 0.06144976 0.10203327 0.61220888] [0.79646881 0.56586623 0.47136818 0.46015996 0.91359077]]
a.nonzero()输出所有非零元素的下标,输出结果为一个tuple,共维数个array,表示所有元素的每一维下标
a.clip(min,max)将小于min值的设为min值,大于max值的设为max值,返回为新的array
1 a = np.arange(0,16).reshape((2,2,2,2))2 print(a)3 print(a.nonzero())4 print(np.zeros(10).nonzero())
[[[[ 0 1] [ 2 3]] [[ 4 5] [ 6 7]]] [[[ 8 9] [10 11]] [[12 13] [14 15]]]](array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int64), array([0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1], dtype=int64), array([0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], dtype=int64), array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], dtype=int64))(array([], dtype=int64),)
1 a = np.random.random((2,5))2 print(a)3 print(a.clip(0.25,0.75))
[[0.13959892 0.82723864 0.46736009 0.81501597 0.73909778] [0.93349076 0.46512676 0.49638509 0.81460657 0.98483514]][[0.25 0.75 0.46736009 0.75 0.73909778] [0.75 0.46512676 0.49638509 0.75 0.75 ]]
a.flatten()将a所有元素列成一个一维array
a.flat a的迭代器
1 a = np.arange(0,6).reshape((2,3))2 print(a)3 print(a.flatten())4 for item in a.flat:5 print(item)
[[0 1 2] [3 4 5]][0 1 2 3 4 5]012345
a[np.newaxis]将原对象作为一个元素放进一个array里,即在最外面加了一维
a[:[,:],np.newaxis]按照np.newaxis之前的切片表示的遍历最小元素,将每个元素放进一个array
这种操作都没有产生新的对象
1 a = np.arange(0,6) 2 print(a[np.newaxis]) 3 print(a[:,np.newaxis]) 4 a[np.newaxis][0][1] = 0 5 print(a) 6 print("a[np.newaxis][0][1] is a?",a[np.newaxis][0][1] is a) 7 b = np.arange(0,6).reshape((2,3)) 8 print("1: ", b[np.newaxis]) 9 print("2: ", b[:,np.newaxis])10 print("3: ", b[:,:,np.newaxis])
[[0 1 2 3 4 5]][[0] [1] [2] [3] [4] [5]][0 0 2 3 4 5]a[np.newaxis][0][1] is a? False1: [[[0 1 2] [3 4 5]]]2: [[[0 1 2]] [[3 4 5]]]3: [[[0] [1] [2]] [[3] [4] [5]]]
np.vstack(ndarray a, ndarray b[,...])将a、b整体进行连接,合成一个ndarray,要求a和b除第一维外其余维一样,合并后得到的第一维为a、b的第一维相加,第二维shape不变
np.hstack(ndarray a, ndarray b[,...])将a、b的每一个第一维元素进行连接,合成一个ndarray,要求第二维外其余维一样,合并后第二维为a、b的第二维相加,其余维不变
np.concatenate((ndarray a, ndarray b[,...]),axis=0)可以自由定义以第几维进行连接,除指定维外其余维一样
对于一维array,运算时当做1*n的array进行连接,运算完h连接会产生1*2n的array,仍变成一维的长2n的array,而v连接产生2*n的array
连接操作均返回新的对象
1 a = np.arange(0,6).reshape((2,3)) 2 b = np.arange(6,12).reshape((2,3)) 3 print("a: ", a) 4 print("b: ", b) 5 print("vab: ", np.vstack((a,b))) 6 print("hab: ", np.hstack((a,b))) 7 print(a.shape,b.shape,np.vstack((a,b)).shape) 8 print(a.shape,b.shape,np.hstack((a,b)).shape) 9 a = np.arange(0,6)10 b = np.arange(6,12)11 print("a: ", a)12 print("b: ", b)13 print("vab: ", np.vstack((a,b)))14 print("hab: ", np.hstack((a,b)))15 print(a.shape,b.shape,np.vstack((a,b)).shape)16 print(a.shape,b.shape,np.hstack((a,b)).shape)17 a = np.arange(0,6).reshape((1,6))18 b = np.arange(6,12).reshape((1,6))19 print("a: ", a)20 print("b: ", b)21 print("vab: ", np.vstack((a,b)))22 print("hab: ", np.hstack((a,b)))23 print(a.shape,b.shape,np.vstack((a,b)).shape)24 print(a.shape,b.shape,np.hstack((a,b)).shape)
a: [[0 1 2] [3 4 5]]b: [[ 6 7 8] [ 9 10 11]]vab: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]hab: [[ 0 1 2 6 7 8] [ 3 4 5 9 10 11]](2, 3) (2, 3) (4, 3)(2, 3) (2, 3) (2, 6)a: [0 1 2 3 4 5]b: [ 6 7 8 9 10 11]vab: [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11]]hab: [ 0 1 2 3 4 5 6 7 8 9 10 11](6,) (6,) (2, 6)(6,) (6,) (12,)a: [[0 1 2 3 4 5]]b: [[ 6 7 8 9 10 11]]vab: [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11]]hab: [[ 0 1 2 3 4 5 6 7 8 9 10 11]](1, 6) (1, 6) (2, 6)(1, 6) (1, 6) (1, 12)
1 a = np.arange(0,6).reshape((2,3)) 2 b = np.arange(6,10).reshape((2,2)) 3 print("a: ", a) 4 print("b: ", b) 5 print("hab: ", np.hstack((a,b))) 6 print(a.shape,b.shape,np.hstack((a,b)).shape) 7 a = np.arange(0,6).reshape((3,2)) 8 b = np.arange(6,10).reshape((2,2)) 9 print("a: ", a)10 print("b: ", b)11 print("vab: ", np.vstack((a,b)))12 print(a.shape,b.shape,np.vstack((a,b)).shape)13 a = np.arange(0,12).reshape((2,2,3))14 b = np.arange(12,20).reshape((2,2,2))15 print("a: ", a)16 print("b: ", b)17 print("cab-2: ", np.concatenate((a,b),axis=2))18 print(a.shape,b.shape,np.concatenate((a,b),axis=2).shape)
a: [[0 1 2] [3 4 5]]b: [[6 7] [8 9]]hab: [[0 1 2 6 7] [3 4 5 8 9]](2, 3) (2, 2) (2, 5)a: [[0 1] [2 3] [4 5]]b: [[6 7] [8 9]]vab: [[0 1] [2 3] [4 5] [6 7] [8 9]](3, 2) (2, 2) (5, 2)a: [[[ 0 1 2] [ 3 4 5]] [[ 6 7 8] [ 9 10 11]]]b: [[[12 13] [14 15]] [[16 17] [18 19]]]cab-2: [[[ 0 1 2 12 13] [ 3 4 5 14 15]] [[ 6 7 8 16 17] [ 9 10 11 18 19]]](2, 2, 3) (2, 2, 2) (2, 2, 5)
1 a = np.arange(0,6)2 b = np.arange(6,12)3 np.hstack((a,b))[0] = 1004 np.hstack((a,b))[6] = 1005 print(a)6 print(b)
[0 1 2 3 4 5][ 6 7 8 9 10 11]
np.vsplit(ndarray a, b)将a对第一维进行拆分成b等份
np.hsplit(ndarray a, b)将a对第二维进行拆分成b等份
np.split(ndarray a, b, axis=0)将a对指定的维度进行拆分成b等份
np.array_split(ndarray a, b, axis=0)将a对指定的维度进行拆分成b份,允许不等分,此时会尽量均等,多出部分从前到后分配
1 a = np.arange(6).reshape((2,3))2 print(a)3 print(np.vsplit(a,2))4 print(np.hsplit(a,3))5 print(np.split(a,2,axis=0))6 print(np.split(a,3,axis=1))7 print(np.array_split(a,2,axis=1))
[[0 1 2] [3 4 5]][array([[0, 1, 2]]), array([[3, 4, 5]])][array([[0], [3]]), array([[1], [4]]), array([[2], [5]])][array([[0, 1, 2]]), array([[3, 4, 5]])][array([[0], [3]]), array([[1], [4]]), array([[2], [5]])][array([[0, 1], [3, 4]]), array([[2], [5]])]
np.empty_like( array x ):返回一个大小和类型与x相同的array,但其中内容并未初始化,可能为随机值
np.zeros_like( array x ):返回一个大小与x相同,但元素全为 0 的array
np.ones_like( array x ):返回一个大小与x相同,但元素全为 1 的array
np.tile( array x, tuple shape):返回一个大小为 x 的维分别于 shape 的维相乘的 array,即将 x copy了 shape遍。