python的numpy总结(转)

匿名 (未验证) 提交于 2019-12-02 22:54:36

ת: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 stripesare neat
square平方
exp计算e^x
log、log10、log2、log1pln、底数10、底数2、log(x+1)
sign1(正数),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
函数说明
addnp.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
qrQR分解
svd奇异值分解
solveAx=b
lstsqAx=b最小二乘解

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!