numpy使用数组进行数据处理
numpy使用数组进行数据处理meshgrid函数理解: 二维坐标系中,X轴可以取三个值1,2,3,Y轴可以取三个值7,8,请问可以获得多少个点的坐标? >>> import numpy as np#导入numpy >>> a=np.array([1,3])#创建一维数组 >>> b=np.array([7,8]) >>> res=np.meshgrid(a,b)#获取所有点的横坐标和纵坐标 >>> res#返回list,有两个元素,第一个元素是X轴的取值,第二个元素是Y轴的取值 [array([[1,3],[1,3]]),array([[7,7,7],[8,8]])] 生成坐标绘制图像: >>> import numpy as np >>> points=np.arange(-5,5,0.01)#从-5到5步长为0.01 >>> xs,ys=np.meshgrid(points,points) >>> ys array([[-5.,-5.,...,-5. ],[-4.99,-4.99,-4.99],[-4.98,-4.98,-4.98],[ 4.97,4.97,4.97],[ 4.98,4.98,4.98],[ 4.99,4.99,4.99]]) >>> z=np.sqrt(xs**2+ys**2)#函数的求值运算 >>> z array([[7.07106781,7.06400028,7.05693985,7.04988652,7.06400028],[7.06400028,7.05692568,7.04985815,7.04279774,7.05692568],[7.05693985,7.04278354,7.03571603,7.04985815],[7.04988652,7.0286414,7.04279774],7.05692568]]) >>> import matplotlib.pyplot as plt >>> plt.imshow(z,cmap=plt.cm.gray); plt.colorbar() <matplotlib.image.AxesImage object at 0x00000000087D6EB8> <matplotlib.colorbar.Colorbar object at 0x000000000D8F4FD0> >>> plt.title("Image plot of $sqrt{x^2 + y^2}$ for a grid of values") Text(0.5,1.0,'Image plot of $sqrt{x^2 + y^2}$ for a grid of values') >>>plt.show() 将条件逻辑表述为数组运算根据cond中的值来对数组进行选取,如果cond中的值为True,那么就选择x中对应的值,否则就选择y中对应的值,比如cond[0]=True,那么result[0]处应当放置yarr[0]的值 >>> xarr=np.array([1.1,1.2,1.3,1.4,1.5]) >>> yarr=np.array([2.1,2.2,2.3,2.4,2.5]) >>> cond=np.array([True,False,True,False]) >>> result=[(x if c else y) for x,y,c in zip(xarr,yarr,cond)] >>> result [1.1,2.5] where方法使用矢量where方法可以取代上面的写法 >>> result=np.where(cond,xarr,yarr) >>> result array([1.1,2.5]) 使用标量np.where的第二个和第三个参数不必是数组,它们都可以是标量值。在数据分析工作中,where通常用于根据另一个数组而产生一个新的数组。假设有一个由随机数据组成的矩阵,你希望将所有正值替换为2,将所有负值替换为-2。若利用np.where,则会非常简单: >>> arr=np.random.randn(4,4) >>> arr array([[-0.02461196,-0.11867552,0.49004256,-0.25236766],[ 1.66484493,-0.41180743,-0.34837293,-2.61422661],[ 0.51476568,-0.41451909,1.28553372,0.13866799],[-0.94795594,-1.49302099,1.18480636,0.20310613]]) >>> arr>0 array([[False,False],[ True,True],[False,True]]) >>> np.where(arr>0,-2) array([[-2,-2,-2],[ 2,2],[-2,2]]) 标量矢量结合如果对应位置是True,那么新的数组对应位置为2,否则就还是原来的数值 >>> np.where(arr>0,arr) array([[-0.02461196,2.,[ 2.,2. ],2. ]]) 数学统计方法mean函数对所有的元素求均值 >>> import numpy as np >>> arr=np.array([[1,[4,6],[7,9]]) >>> arr.mean() 5.0 >>> np.mean(arr) 5.0 sum函数对所有元素求和 >>> arr.sum() 45 可选轴求值>>> arr.mean(axis=1)#列求平均值 array([2.,5.,8.]) >>> arr.mean(axis=0)#行求平均值 array([4.,6.]) >>> arr.sum(axis=0) array([12,15,18])#行求和 >>> arr.sum(axis=1) array([ 6,24])#列求和 cumsum函数1.对于一维输入a(可以是list,可以是array,假设a=[1,4,6,7] ,就是当前列之前的和加到当前列上,如下: >>>import numpy as np >>> a=[1,7] >>> np.cumsum(a) array([ 1,10,21,28,36,45,55,75,105]) 2.对于二维输入a,axis=0(第1行不动,将第1行累加到其他行);axis=1(进入最内层,转化成列处理。第1列不动,将第1列累加到其他列),如下: >>>import numpy as np >>> c=[[1,9]] >>> np.cumsum(c,axis=0) array([[ 1,[ 5,9],[12,18]]) >>> np.cumsum(c,axis=1) array([[ 1,[ 4,9,15],[ 7,24]]) cumprod函数累乘方法同理 >>> arr.cumprod(axis=1) array([[ 1,[ 4,20,120],[ 7,56,504]],dtype=int32) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |