ת:https://blog.csdn.net/danieljianfeng/article/details/46894185
ones函数
>>> import numpy as np >>> a=np.ones(3);a array([ 1., 1., 1.]) >>> b=np.ones((3,2));b array([[ 1., 1.], [ 1., 1.], [ 1., 1.]]) - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
zeros函数
>>> c=np.zeros(3) >>> c array([ 0., 0., 0.]) >>> d=np.zeros((2,3));d array([[ 0., 0., 0.], [ 0., 0., 0.]]) #d=np.zeros(2,3)会报错,d=np.zeros(3,dtype=int)来改变默认的数据类型 - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
eye&identity函数
>>> e=np.eye(3);e array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]]) >>> e=np.eye(3,2);e array([[ 1., 0.], [ 0., 1.], [ 0., 0.]]) >>> e=np.eye(3,1);e array([[ 1.], [ 0.], [ 0.]]) >>> e=np.eye(3,3);e array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]]) >>> e=np.eye(3,3,1);e array([[ 0., 1., 0.], [ 0., 0., 1.], [ 0., 0., 0.]]) e=np.eye(3,3,2);e array([[ 0., 0., 1.], [ 0., 0., 0.], [ 0., 0., 0.]]) >>> e=np.eye(3,3,3);e array([[ 0., 0., 0.], [ 0., 0., 0.], [ 0., 0., 0.]]) >>> e=np.eye(3,3,4);e array([[ 0., 0., 0.], [ 0., 0., 0.], [ 0., 0., 0.]]) >>> p=np.identity(4);p array([[ 1., 0., 0., 0.], [ 0., 1., 0., 0.], [ 0., 0., 1., 0.], [ 0., 0., 0., 1.]]) >>> p=np.identity(4,3);p #会报错 >>> p=np.identity((4,3));p #会报错 - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
empty函数
>>> a=np.empty(3);a array([ 1.60091154e-163, 1.12069303e-258, 3.23790862e-318]) >>> a=np.empty((3,3));a array([[ 1.57741456e-284, 1.57680914e-284, 1.56735002e-163], [ 1.56205068e-163, 1.62511438e-163, 1.21880041e+171], [ 1.57757869e-052, 7.34292780e+223, 4.71235856e+257]]) - 1
- 2
- 3
- 4
- 5
- 6
- 7
ones_like,zeros_like,empty_like函数
>>> a=np.array([[[1,2],[1,2]],[[1,2],[1,2]],[[1,2],[1,2]]]) >>> a.shape (3, 2, 2) >>> b=np.ones_like(a) >>> b array([[[1, 1], [1, 1]], [[1, 1], [1, 1]], [[1, 1], [1, 1]]]) >>> b=np.zeros_like(a);b array([[[0, 0], [0, 0]], [[0, 0], [0, 0]], [[0, 0], [0, 0]]]) >>> a=np.array([[[1,2],[1,2]],[[1,2],[1,2]],[[1,2],[1,2]]]) >>> b=np.empty_like(a);b array([[[39125057, 40012256], [81313824, 81313856]], [[ 0, 0], [ 0, 0]], [[ 0, 0], [ 0, 0]]]) #注意,shape和dtype均复制 - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
关于astype转换数据类型
>>> b=np.array([[[1,2],[1,2]],[[1,2],[1,2]],[[1,2],[1,2]]]) >>> b.dtype dtype('int32') >>> c=b.astype(float) #also c=b.astype(np.float64) >>> c.dtype dtype('float64') #float转int会将小数部分去掉 >>> a=np.array([1.7,-2.9]) >>> b=a.astype(int) >>> b array([ 1, -2]) #如果字符串组表示的全部是数字,astype可以将其转为数值形式 >>> a=np.array(['23','0.32','-0.9']) >>> a.dtype dtype('S4') >>> a=np.array(['23','0.32','-0.9'],dtype=np.string_) >>> a.dtype dtype('S4') >>> c=a.astype(float);c array([ 23. , 0.32, -0.9 ]) - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
Ndarray切片视图而非副本特性
>>> a=np.arange(10) >>> b=a[5:8];b #仅仅是取了一个a数组的视图,b相当于a的一个子集 array([5, 6, 7]) >>> b[1]=1234;a array([ 0, 1, 2, 3, 4, 5, 1234, 7, 8, 9]) >>> b[2]=77;a array([ 0, 1, 2, 3, 4, 5, 1234, 77, 8, 9]) >>> b[0]=90;a array([ 0, 1, 2, 3, 4, 90, 1234, 77, 8, 9]) >>> b[:]=64;a array([ 0, 1, 2, 3, 4, 64, 64, 64, 8, 9]) >>> b array([64, 64, 64]) >>> b=90 #注意使b中三个元素均变为90的操作是b[:]=90,而不是b=90 >>> b 90 >>> a array([ 0, 1, 2, 3, 4, 64, 64, 64, 8, 9]) #可以用a.copy()函数避免这个问题,新建一个副本 >>> a=np.arange(10) >>> b=a[5:8].copy() >>> b array([5, 6, 7]) >>> b[:]=64;a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> b array([64, 64, 64]) - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
花式索引与切片表达上的一个区分
>>> a=np.arange(1,13,1).reshape((2,2,3)) >>> a array([[[ 1, 2, 3], [ 4, 5, 6]], [[ 7, 8, 9], [10, 11, 12]]]) >>> a[1][0] array([7, 8, 9]) >>> a[1,0] #切片 array([7, 8, 9]) #a[1][0]与a[1,0]效果相同 >>> a[[1,0]] #花式索引 array([[[ 7, 8, 9], [10, 11, 12]], [[ 1, 2, 3], [ 4, 5, 6]]]) >>> a[[1,0,1]] #花式索引 array([[[ 7, 8, 9], [10, 11, 12]], [[ 1, 2, 3], [ 4, 5, 6]], [[ 7, 8, 9], [10, 11, 12]]]) - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
关于:的使用
>>> a=np.arange(24).reshape(6,2,2) >>> a array([[[ 0, 1], [ 2, 3]], [[ 4, 5], [ 6, 7]], [[ 8, 9], [10, 11]], [[12, 13], [14, 15]], [[16, 17], [18, 19]], [[20, 21], [22, 23]]]) >>> a[[0,2,4,3,5,1]] #对列进行花式索引 array([[[ 0, 1], [ 2, 3]], [[ 8, 9], [10, 11]], [[16, 17], [18, 19]], [[12, 13], [14, 15]], [[20, 21], [22, 23]], [[ 4, 5], [ 6, 7]]]) >>> a[:,[1,0]] #对行进行花式索引 array([[[ 2, 3], [ 0, 1]], [[ 6, 7], [ 4, 5]], [[10, 11], [ 8, 9]], [[14, 15], [12, 13]], [[18, 19], [16, 17]], [[22, 23], [20, 21]]]) >>> a[:,1] #选取第二行 array([[ 2, 3], [ 6, 7], [10, 11], [14, 15], [18, 19], [22, 23]]) >>> a[1] #选取第二列 array([[4, 5], [6, 7]]) >>> a[:,1][1] #选取第二行后再选第二列 array([6, 7]) >>> a[:,1][:,1] array([ 3, 7, 11, 15, 19, 23]) - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
花式索引补充(花式索引是将数据复制到新数组中)
>>> import numpy as np >>> a=np.arange(32).reshape((8,4)) >>> a array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23], [24, 25, 26, 27], [28, 29, 30, 31]]) >>> a[[4,3,0,6]] array([[16, 17, 18, 19], [12, 13, 14, 15], [ 0, 1, 2, 3], [24, 25, 26, 27]]) >>> a[[-2]] array([[24, 25, 26, 27]]) >>> a[[-3,-5,-7]] #注意排序中2和-2的差别,2代表第三,-2代表倒数第二 array([[20, 21, 22, 23], [12, 13, 14, 15], [ 4, 5, 6, 7]]) >>> a[[2,1,6,3],[0,2,3,1]] #取第三列的第一个排在第一位…… array([ 8, 6, 27, 13]) >>> a[[2,1,6,3]][:,[0,3,1,2]] #先取a[[2,1,6,3]],再对其进行列(行)排列 array([[ 8, 11, 9, 10], [ 4, 7, 5, 6], [24, 27, 25, 26], [12, 15, 13, 14]]) - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
Transpose&swapaxes(数组轴对换)
>>> import numpy as np >>> a=np.arange(16).reshape((2,2,4)) >>> a array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7]], [[ 8, 9, 10, 11], [12, 13, 14, 15]]]) >>> a.transpose() array([[[ 0, 8], [ 4, 12]], [[ 1, 9], [ 5, 13]], [[ 2, 10], [ 6, 14]], [[ 3, 11], [ 7, 15]]]) >>> a.transpose((1,0,2)) #怎么来的并没有搞清楚 array([[[ 0, 1, 2, 3], [ 8, 9, 10, 11]], [[ 4, 5, 6, 7], [12, 13, 14, 15]]]) >>> a.swapaxes(1,2) #怎么来的并没有搞清楚 array([[[ 0, 4], [ 1, 5], [ 2, 6], [ 3, 7]], [[ 8, 12], [ 9, 13], [10, 14], [11, 15]]]) - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
元素级数组元素
һԪufunc
| 函数 | 说明 |
|---|---|
| abs、fabs | 计算绝对值,fabs不能用于复数 |
| aqrt | 平方根 |
| zebra stripes | are neat |
| square | 平方 |
| exp | 计算e^x |
| log、log10、log2、log1p | ln、底数10、底数2、log(x+1) |
| sign | 1(正数),0(0)、-1(负数) |
| ceil | 大于等于该值的最大整数 |
| floor | 小于等于该值的最大整数 |
| rint | 四舍五入,但是dtype保留不变 |
| modf | 小数部分和整数部分分开 |
| isnan | “哪些值不是一个数字”的布尔型数组 |
| isfinite、isinf | “哪些值是无穷”布尔型 |
| cos、cosh、sin、sinh、tan、tanh | 三角 |
| arcos、arcosh、arsin、arsinh、artan、artanh | 反三角 |
| logical_not | 相当于:-a |
二元ufunc
| 函数 | 说明 |
|---|---|
| add | np.add(x,y) |
| subtract | 减 |
| multiply | 乘 |
| divide、floor_divide | 除法、丢弃余数 |
| power np.power(a,b) | 计算a^b |
| maximum、fmax | |
| minmun、fmin | |
| mod | 余数 |
| copysign | 第二组元素中的符号复制给第一组元素 |
| greater、greater_equal、less、less_equal、equal、not_equal >、>=、<、<=、==、!= | 返回布尔型数组 |
| logical_and、logical_or、logical_xor | 逻辑运算 |
在一组值(网格型)上计算函数sqrt(x^2+y^2 )
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> a=np.arange(-5,5,0.01) >>> xs,ys=np.meshgrid(a,a) #np.meshgrid函数接受两个一位数组,并产生一个二维矩阵 >>> ys array([[-5. , -5. , -5. , ..., -5. , -5. , -5. ], [-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99], [-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98], ..., [ 4.97, 4.97, 4.97, ..., 4.97, 4.97, 4.97], [ 4.98, 4.98, 4.98, ..., 4.98, 4.98, 4.98], [ 4.99, 4.99, 4.99, ..., 4.99, 4.99, 4.99]]) >>> z=np.sqrt(xs**2+ys**2) >>> z array([[ 7.07106781, 7.06400028, 7.05693985, ..., 7.04988652, 7.05693985, 7.06400028], [ 7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815, 7.05692568], [ 7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354, 7.04985815], ..., [ 7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 , 7.03571603, 7.04279774], [ 7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354, 7.04985815], [ 7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815, 7.05692568]]) >>> plt.imshow(z,cmap=plt.cm.gray);plt.colorbar();plt.title("Image plot of $\sqrt{x^2+y^2}$ for a grid of values") - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29

将条件逻辑表述为数组运算
numpy.where是三元表达式 x if condition else y的矢量化版本,举例进行比较
>>> import numpy as np >>> x=np.array([1.1,1.2,1.3,1.4,1.5]) >>> y=np.array([2.1,2.2,2.3,2.4,2.5]) >>> q=np.array([True,False,True,True,False]) >>> result=[(x if c else y) #if有两个问题1、计算速度慢2、无法用于多维数组 ... for x,y,c in zip(x,y,q)] >>> result [1.1000000000000001, 2.2000000000000002, 1.3, 1.3999999999999999, 2.5] >>> result=np.where(q,x,y);result array([ 1.1, 2.2, 1.3, 1.4, 2.5]) #在数据工作中,where通常根据一个数组产生一个新数组 - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12

any,all函数
>>> import numpy as np >>> b=np.array([False,False,True,False]) >>> b.any() True >>> b.all() - 1
- 2
- 3
- 4
- 5
- 6
- 7
非布尔型数组中也可以用,非0元素都是True
求5%分位数
>>> a=np.random.randn(1000) >>> a.sort() #这一步执行后数组a中的元素以及排好序了,不能写成b=a.sort(),这里b是空值 >>> a[int(0.05*len(a))] -1.6949758821658074 - 1
- 2
- 3
- 4
- 5
数组集合运算
>>> a=np.array([1,1,2,9,3,5]) >>> np.unique(a) #a.unique()是错误表达方式 计算唯一元素,并且返回有序结果 array([1, 2, 3, 5, 9]) >>> set(a) #变成集合形式 并且返回有序结果 set([1, 2, 3, 5, 9]) >>> sorted(set(a)) #纯Python代码 [1, 2, 3, 5, 9] >>> a=np.array([6,0,0,3,2,5,6]) >>> b=np.array([2,3,6]) >>> np.in1d(a,b) #a是否包含于b array([ True, False, False, True, True, False, True], dtype=bool) >>> np.intersect1d(a,b) #交集,并返回有序结果 array([2, 3, 6]) >>> np.union1d(a,b) #并集,并返回有序结果 array([0, 2, 3, 5, 6]) >>> np.setdiff1d(a,b) #集合的差 array([0, 5]) - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
数据存储读取
C:\Users\Administrator\Documents
>>> import numpy as np >>> a=np.arange(24).reshape((2,2,6)) >>> a array([[[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11]], [[12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]]]) >>> np.save('AABBCC',a) - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10

>>> import numpy as np >>> np.load('AABBCC.npy') array([[[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11]], [[12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]]]) >>> a=array([[[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11]], [[12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]]]) >>> b=np.arange(9) >>> c=np.array(['b','a']) >>> np.savez('abc.npz',q=a,w=b,e=c) >>> p=np.load('abc.npz') >>> p <numpy.lib.npyio.NpzFile object at 0x06063830> >>> p['e'] array(['b', 'a'], dtype='|S1') >>> p['q'] array([[[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11]], [[12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]]]) - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28

>>> import numpy as np >>> a=np.loadtxt('BBAACC.txt',delimiter=',') >>> a array([[ 866052., 300238.], [ 866052., 304753.], [ 866052., 300322.], [ 866052., 300539.], [ 866052., 305271.], [ 866052., 306853.], [ 866052., 307567.], [ 866052., 301155.], [ 866052., 300420.], [ 866052., 302583.], [ 866052., 300791.], [ 866052., 300448.], [ 866052., 300014.], [ 866052., 309366.], [ 866052., 323919.], [ 866052., 300126.], [ 866052., 308855.], [ 866052., 303444.]]) - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
numpy.linalg模块
numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西,与MATLAB和R所使用的是相同的行业标准库。
| 函数 | 说明 |
|---|---|
| diag | |
| dot | 逆阵乘法 |
| trace | 计算对角线元素和 |
| det | 计算矩阵行列式 |
| eig | 本征值和本征向量 |
| inv | 逆 |
| pinv | |
| qr | QR分解 |
| svd | 奇异值分解 |
| solve | Ax=b |
| lstsq | Ax=b最小二乘解 |
文章来源: python的numpy总结(转)