Numpy学习
Numpy包的学习
一、引言
最近刚开始学习Python,掌握了基本的一些语法后,开始着手学习常用的包。今天与大家分享的是Numpy包。Numpy包是数值计算的基础,贡献了多维数组这种数据存储形式,大大提升了运算效率。说到多维数组自然让人联想起R语言。图1是R语言和Python的对比,没有高下,只有左右。

图1
好了,下面进入正题。
本文的结构分为三部分,第一部分为我学习numpy包时用的思维导图,第二部分为按照思维导图顺序编写的相应的代码,第三部分为参考文献。
二、思维导图

三、代码实例
# coding: utf-8 # 1.索引—类似R语言,但是又不一样。最主要的区别就是df[2,2]在R语言中表示第二行第二列的元素,而python中表示第3行第3列的元素。 import numpy as np df=np.array(((1,2,3),(4,5,6),(7,8,9),(10,11,12))) df df[2,1] # 1.1元素 print(df[[0,2],[2,2]],'\n') # 1.2行列切片 df[np.ix_([0,2],[2,2])] df[1,:] #指定行 df[::2,1] #指定第2列,并且行间隔为2 df[:,2] #指定列 df[:,[1,2]] # #'...'可以用来替换0个或者多个':' import numpy as np x=np.array([1,12,25,8,15,35,50,7,2,10]) x x[3:7] #x[1:9:2] x2d=np.array([(100,200,300),(111,222,333),(123,456,789),(125,457,789),(127,459,793),(129,461,795)]) x2d[0:4,0:3] x2d x2d[:,2] x2d[...] #相当于x2d[:,:] # 1.3当切片遇上for循环 x=np.array([1,12,15,8,25,35,50,7,2,10]) for i in x: print(i) q=np.array([[0],[0]]) for row in x2d: print(row) # 2.数组的变形及转换方法-revel、reshape、resize # 注:下面介绍的方法默认的都是按照行的顺序输出数组 # # In[ ]: x2d # 2.1不改变原来数组x2d # In[ ]: x2d.ravel() # In[ ]: x2d.reshape(3,6) # In[ ]: x2d.reshape(1,18) # 2.2改变原来的数组x2d # In[ ]: x2d.resize(2,9) x2d #已经改变了原来的x2d # In[ ]: x2d.tolist() # In[ ]: x2d.tofile # In[ ]: x2d.tostring # 3.与数组有关的类 # 3.1矩阵子类 # In[ ]: import numpy as np m1=np.matrix('1 2 3;4 5 6;7 8 9') m1 # In[ ]: m2=np.matrix('4 5 6;7 8 9;10 11 12') m2 # In[ ]: m1*m2 # 3.2掩码数组 # In[ ]: import numpy.ma as ma x=np.array([72,79,85,90,150,-135,120,-10,60,100]) mx=ma.masked_array(x,mask=[0,0,0,0,0,1,0,1,0,0]) mx2=ma.masked_array(x,x<0) x.mean() # In[ ]: x # In[ ]: mx # In[ ]: mx2 # In[ ]: x.mean() # In[ ]: mx.mean() # In[ ]: mx2.mean() # 3.3结构化的数组 # In[ ]: import numpy as np d=np.dtype({'names':['temp','envir','city'],'formats':['i4','i4','a25']}) c=np.array([(-10,90,'Dalian'),(5,85,'Hangzhou'),(-20,80,'Mudanjiang'),(0,80,'Dongyin')],dtype=d) # In[ ]: print(c[0]) # In[ ]: print(c['temp']) # In[ ]: print(c['envir']) # In[ ]: print(c['city']) # 4.通用函数对象 # In[ ]: import numpy as np x1=np.array([72,79,85,90,150,-135,120,-10,60,100]) x2=np.array([72,79,85,90,150,-135,120,-10,60,100]) x_angle=np.array([30,60,90,120,150,180]) x_sqr=np.array([9,16,25,225,400,625]) x_bit=np.array([2,4,8,16,32,64]) # In[ ]: np.greater_equal(x1,x2) # In[ ]: np.mod(x1,x2) # In[ ]: np.exp(x1) # In[ ]: np.reciprocal(x1) # In[ ]: np.negative(x1) # In[ ]: np.isreal(x1) # In[ ]: np.isnan(x1) # In[ ]: np.sqrt(np.square(x_sqr)) # In[ ]: np.sin(x_angle*np.pi/180) # In[ ]: np.tan(x_angle*np.pi/180) # In[ ]: np.right_shift(x_bit,1) # In[ ]: x_bit # In[ ]: np.left_shift(x_bit,2) # 5.Numpy的数学模块 # 5.1numpy.linalg模块—‘线性代数模块’ # In[ ]: import numpy as np from numpy import linalg as LA arr2d=np.array([(1,2,3),(4,5,6),(7,8,9)]) eig_val,eig_vec=LA.eig(arr2d) # In[ ]: eig_val # In[ ]: eig_vec # In[ ]: LA.norm(arr2d) #矩阵或者向量范数 # In[ ]: LA.det(arr2d) #行列式 # In[ ]: LA.inv(arr2d) #逆 # In[ ]: arr1=np.array([[2,3],[3,4]]) #方程系数 arr2=np.array([4,5]) #方程组常数项 results=np.linalg.solve(arr1,arr2) #求解线性矩阵方程或者线性标量方程组 results # In[ ]: np.allclose(np.dot(arr1,results),arr2) #np.dot 点积 #np.allclose() Returns True if two arrays are element-wise equal within a tolerance. # 5.2numpy.random模块—‘随机抽样模块’ # In[ ]: import numpy as np np.random.permutation(10) # In[ ]: np.random.randint(20,50,size=10) #均匀分布 # In[ ]: np.random.random_sample(10) # In[ ]: np.random.chisquare(10,5)
四、参考文献(推荐阅读)
[1].http://mp.weixin.qq.com/s/54fQScsNn9Sg-G02CEoaOw
[2].《Python科学计算基础教程》 (大部分实例来源于此)
[3].https://docs.scipy.org/doc/numpy/reference/routines.linalg.html (详细介绍了np.linalg)
[4].https://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html
[5].https://docs.scipy.org/doc/numpy/reference/routines.random.html (详细介绍了np.random)

浙公网安备 33010602011771号