扣丁学堂详解Python框架之NumPy常用方法总结

2018-02-02 10:21:12 606浏览

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开发工程师技术交流群:279521237。



扣丁学堂微信公众号



关注微信公众号获取更多学习资料



查看更多关于"Python开发资讯"的相关文章>>

标签: Python视频教程 Python基础教程 Python爬虫 Python培训 Python开发工程师 Python开发框架

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号