NumPy是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nestedliststructure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。NumPy(NumericPython)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:LawrenceLivermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。
numpy中的数据类型,ndarray类型,和标准库中的array.array并不一样。
ndarray的创建
>>>importnumpyasnp
>>>a=np.array([2,3,4])
>>>a
array([2,3,4])
>>>a.dtype
dtype('int64')
>>>b=np.array([1.2,3.5,5.1])
>>>b.dtype
dtype('float64')
二维的数组
>>>b=np.array([(1.5,2,3),(4,5,6)])
>>>b
array([[1.5,2.,3.],
[4.,5.,6.]])
创建时指定类型
>>>c=np.array([[1,2],[3,4]],dtype=complex)
>>>c
array([[1.+0.j,2.+0.j],
[3.+0.j,4.+0.j]])
创建一些特殊的矩阵
>>>np.zeros((3,4))
array([[0.,0.,0.,0.],
[0.,0.,0.,0.],
[0.,0.,0.,0.]])
>>>np.ones((2,3,4),dtype=np.int16)#dtypecanalsobespecified
array([[[1,1,1,1],
[1,1,1,1],
[1,1,1,1]],
[[1,1,1,1],
[1,1,1,1],
[1,1,1,1]]],dtype=int16)
>>>np.empty((2,3))#uninitialized,outputmayvary
array([[3.73603959e-262,6.02658058e-154,6.55490914e-260],
[5.30498948e-313,3.14673309e-307,1.00000000e+000]])
创建一些有特定规律的矩阵
123456789>>>np.arange(10,30,5)
array([10,15,20,25])
>>>np.arange(0,2,0.3)#itacceptsfloatarguments
array([0.,0.3,0.6,0.9,1.2,1.5,1.8])
>>>fromnumpyimportpi
>>>np.linspace(0,2,9)#9numbersfrom0to2
array([0.,0.25,0.5,0.75,1.,1.25,1.5,1.75,2.])
>>>x=np.linspace(0,2*pi,100)#usefultoevaluatefunctionatlotsofpoints
>>>f=np.sin(x)
一些基本的运算
加减乘除三角函数逻辑运算
>>>a=np.array([20,30,40,50])
>>>b=np.arange(4)
>>>b
array([0,1,2,3])
>>>c=a-b
>>>c
array([20,29,38,47])
>>>b**2
array([0,1,4,9])
>>>10*np.sin(a)
array([9.12945251,-9.88031624,7.4511316,-2.62374854])
>>>a<35
array([True,True,False,False],dtype=bool)
矩阵运算
matlab中有.*,./等等
但是在numpy中,如果使用+,-,×,/优先执行的是各个点之间的加减乘除法
如果两个矩阵(方阵)可既以元素之间对于运算,又能执行矩阵运算会优先执行元素之间的运算
>>>importnumpyasnp
>>>A=np.arange(10,20)
>>>B=np.arange(20,30)
>>>A+B
array([30,32,34,36,38,40,42,44,46,48])
>>>A*B
array([200,231,264,299,336,375,416,459,504,551])
>>>A/B
array([0,0,0,0,0,0,0,0,0,0])
>>>B/A
array([2,1,1,1,1,1,1,1,1,1])
如果需要执行矩阵运算,一般就是矩阵的乘法运算
>>>A=np.array([1,1,1,1])
>>>B=np.array([2,2,2,2])
>>>A.reshape(2,2)
array([[1,1],
[1,1]])
>>>B.reshape(2,2)
array([[2,2],
[2,2]])
>>>A*B
array([2,2,2,2])
>>>np.dot(A,B)
8
>>>A.dot(B)
8
一些常用的全局函数
12345678910>>>B=np.arange(3)
>>>B
array([0,1,2])
>>>np.exp(B)
array([1.,2.71828183,7.3890561])
>>>np.sqrt(B)
array([0.,1.,1.41421356])
>>>C=np.array([2.,-1.,4.])
>>>np.add(B,C)
array([2.,0.,6.])
矩阵的索引分片遍历
>>>a=np.arange(10)**3
>>>a
array([0,1,8,27,64,125,216,343,512,729])
>>>a[2]
8
>>>a[2:5]
array([8,27,64])
>>>a[:6:2]=-1000#equivalenttoa[0:6:2]=-1000;fromstarttoposition6,exclusive,setevery2ndelementto-1000
>>>a
array([-1000,1,-1000,27,-1000,125,216,343,512,729])
>>>a[::-1]#reverseda
array([729,512,343,216,125,-1000,27,-1000,1,-1000])
>>>foriina:
...print(i**(1/3.))
...
nan
1.0
nan
3.0
nan
5.0
6.0
7.0
8.0
9.0
矩阵的遍历
>>>importnumpyasnp
>>>b=np.arange(16).reshape(4,4)
>>>forrowinb:
...print(row)
...
[0123]
[4567]
[891011]
[12131415]
>>>fornodeinb.flat:
...print(node)
...
矩阵的特殊运算
改变矩阵形状--reshape
>>>a=np.floor(10*np.random.random((3,4)))
>>>a
array([[6.,5.,1.,5.],
[5.,5.,8.,9.],
[5.,5.,9.,7.]])
>>>a.ravel()
array([6.,5.,1.,5.,5.,5.,8.,9.,5.,5.,9.,7.])
>>>a
array([[6.,5.,1.,5.],
[5.,5.,8.,9.],
[5.,5.,9.,7.]])
resize和reshape的区别
resize会改变原来的矩阵,reshape并不会
>>>a
array([[6.,5.,1.,5.],
[5.,5.,8.,9.],
[5.,5.,9.,7.]])
>>>a.reshape(2,-1)
array([[6.,5.,1.,5.,5.,5.],
[8.,9.,5.,5.,9.,7.]])
>>>a
array([[6.,5.,1.,5.],
[5.,5.,8.,9.],
[5.,5.,9.,7.]])
>>>a.resize(2,6)
>>>a
array([[6.,5.,1.,5.,5.,5.],
[8.,9.,5.,5.,9.,7.]])
矩阵的合并
>>>a=np.floor(10*np.random.random((2,2)))
>>>a
array([[8.,8.],
[0.,0.]])
>>>b=np.floor(10*np.random.random((2,2)))
>>>b
array([[1.,8.],
[0.,4.]])
>>>np.vstack((a,b))
array([[8.,8.],
[0.,0.],
[1.,8.],
[0.,4.]])
>>>np.hstack((a,b))
array([[8.,8.,1.,8.],
[0.,0.,0.,4.]])
以上就是关于扣丁学堂详解Python框架之NumPy常用方法总结的详细介绍,最后想要了解更多关于Python发展前景趋势,请关注扣丁学堂官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供最新的Python培训视频教程系统,通过千锋扣丁学堂金牌讲师在线录制的Python视频教程课程,让你快速掌握Python从入门到精通开发实战技能。扣丁学堂Python技术交流群:816572891。