NumPy学习笔记

来源:互联网 发布:excel怎么建立数据库 编辑:程序博客网 时间:2024/06/05 19:37

ones函数

>>> import numpy as np>>> a=np.ones(3);aarray([ 1.,  1.,  1.])>>> b=np.ones((3,2));barray([[ 1.,  1.],       [ 1.,  1.],       [ 1.,  1.]])

zeros函数

>>> c=np.zeros(3)>>> carray([ 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)来改变默认的数据类型

eye&identity函数

>>> e=np.eye(3);earray([[ 1.,  0.,  0.],       [ 0.,  1.,  0.],       [ 0.,  0.,  1.]])>>> e=np.eye(3,2);earray([[ 1.,  0.],       [ 0.,  1.],       [ 0.,  0.]])>>> e=np.eye(3,1);earray([[ 1.],       [ 0.],       [ 0.]])>>> e=np.eye(3,3);earray([[ 1.,  0.,  0.],       [ 0.,  1.,  0.],       [ 0.,  0.,  1.]])>>> e=np.eye(3,3,1);earray([[ 0.,  1.,  0.],       [ 0.,  0.,  1.],       [ 0.,  0.,  0.]])e=np.eye(3,3,2);earray([[ 0.,  0.,  1.],       [ 0.,  0.,  0.],       [ 0.,  0.,  0.]])>>> e=np.eye(3,3,3);earray([[ 0.,  0.,  0.],       [ 0.,  0.,  0.],       [ 0.,  0.,  0.]])>>> e=np.eye(3,3,4);earray([[ 0.,  0.,  0.],       [ 0.,  0.,  0.],       [ 0.,  0.,  0.]])>>> p=np.identity(4);parray([[ 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  #会报错

empty函数

>>> a=np.empty(3);aarray([  1.60091154e-163,   1.12069303e-258,   3.23790862e-318])>>> a=np.empty((3,3));aarray([[  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]])

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)>>> barray([[[1, 1],        [1, 1]],       [[1, 1],        [1, 1]],       [[1, 1],        [1, 1]]])>>> b=np.zeros_like(a);barray([[[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);barray([[[39125057, 40012256],        [81313824, 81313856]],       [[       0,        0],        [       0,        0]],       [[       0,        0],        [       0,        0]]])#注意,shape和dtype均复制

关于astype转换数据类型

>>> b=np.array([[[1,2],[1,2]],[[1,2],[1,2]],[[1,2],[1,2]]])>>> b.dtypedtype('int32')>>> c=b.astype(float)    #also c=b.astype(np.float64)>>> c.dtypedtype('float64')#float转int会将小数部分去掉>>> a=np.array([1.7,-2.9])>>> b=a.astype(int)>>> barray([ 1, -2])#如果字符串组表示的全部是数字,astype可以将其转为数值形式>>> a=np.array(['23','0.32','-0.9'])>>> a.dtypedtype('S4')>>> a=np.array(['23','0.32','-0.9'],dtype=np.string_)>>> a.dtypedtype('S4')>>> c=a.astype(float);carray([ 23.  ,   0.32,  -0.9 ])

Ndarray切片视图而非副本特性

>>> a=np.arange(10)>>> b=a[5:8];b  #仅仅是取了一个a数组的视图,b相当于a的一个子集array([5, 6, 7])>>> b[1]=1234;aarray([   0,    1,    2,    3,    4,    5, 1234,    7,    8,    9])>>> b[2]=77;aarray([   0,    1,    2,    3,    4,    5, 1234,   77,    8,    9])>>> b[0]=90;aarray([   0,    1,    2,    3,    4,   90, 1234,   77,    8,    9])>>> b[:]=64;aarray([ 0,  1,  2,  3,  4, 64, 64, 64,  8,  9])>>> barray([64, 64, 64])>>> b=90  #注意使b中三个元素均变为90的操作是b[:]=90,而不是b=90>>> b90>>> aarray([ 0,  1,  2,  3,  4, 64, 64, 64,  8,  9])#可以用a.copy()函数避免这个问题,新建一个副本>>> a=np.arange(10)>>> b=a[5:8].copy()>>> barray([5, 6, 7])>>> b[:]=64;aarray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>>> barray([64, 64, 64])

花式索引与切片表达上的一个区分

>>> a=np.arange(1,13,1).reshape((2,2,3))>>> aarray([[[ 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)>>> aarray([[[ 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))>>> aarray([[ 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]])

Transpose&swapaxes(数组轴对换)

>>> import numpy as np>>> a=np.arange(16).reshape((2,2,4))>>> aarray([[[ 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]]])

元素级数组元素

一元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函数接受两个一位数组,并产生一个二维矩阵>>> ysarray([[-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)>>> zarray([[ 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);resultarray([ 1.1,  2.2,  1.3,  1.4,  2.5])#在数据工作中,where通常根据一个数组产生一个新数组

这里写图片描述

any,all函数

>>> import numpy as np>>> b=np.array([False,False,True,False])>>> b.any()True>>> b.all()

any用于测试数组中是否存在一个或多个True,all检测数组中是否都是True
非布尔型数组中也可以用,非0元素都是True

求5%分位数

>>> 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是否包含于barray([ 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))>>> aarray([[[ 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<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]]])

‘BBAACC.txt’文件如图,将它放在默认路径中
这里写图片描述

>>> import numpy as np>>> a=np.loadtxt('BBAACC.txt',delimiter=',')>>> aarray([[ 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模块

numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西,与MATLAB和R所使用的是相同的行业标准库。

函数 说明 diag dot 逆阵乘法 trace 计算对角线元素和 det 计算矩阵行列式 eig 本征值和本征向量 inv 逆 pinv qr QR分解 svd 奇异值分解 solve Ax=b lstsq Ax=b最小二乘解
0 0
原创粉丝点击