>>> 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.]])
>>> 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)来改变默认的数据类型
>>> 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 #会报错
>>> 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]])
>>> 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均复制
>>> 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 ])
>>> 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])
>>> 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]]])
>>> 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])
>>> 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]])
>>> 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]]])
函数 | 说明 |
---|---|
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 |
函数 | 说明 |
---|---|
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 | 逻辑运算 |
>>> 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")
结果 :imshow将z(二维数组)显示为灰度图,plt.colorbar绘制了右侧颜色栏
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通常根据一个数组产生一个新数组
>>> import numpy as np
>>> b=np.array([False,False,True,False])
>>> b.any()
True
>>> b.all()
any用于测试数组中是否存在一个或多个True,all检测数组中是否都是True
非布尔型数组中也可以用,非0元素都是True
>>> a=np.random.randn(1000)
>>> a.sort() #这一步执行后数组a中的元素以及排好序了,不能写成b=a.sort(),这里b是空值
>>> a[int(0.05*len(a))]
-1.6949758821658074
>>> 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])
我的文件储存目录:
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)
>>> 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
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]]])
>>> 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.]])
numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西,与MATLAB和R所使用的是相同的行业标准库。
函数 | 说明 |
---|---|
diag | |
dot | 逆阵乘法 |
trace | 计算对角线元素和 |
det | 计算矩阵行列式 |
eig | 本征值和本征向量 |
inv | 逆 |
pinv | |
qr | QR分解 |
svd | 奇异值分解 |
solve | Ax=b |
lstsq | Ax=b最小二乘解 |