您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > Python中的Numpy入门教程
Python中的Numpy入门教程这篇文章主要介绍了Python中的Numpy入门教程,着重讲解了矩阵中的数组操作,需要的朋友可以参考下1、Numpy是什么很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。如果接触过matlab、scilab,那么numpy很好入手。在以下的代码示例中,总是先导入了numpy:复制代码代码如下:importnumpyasnpprintnp.version.version1.6.22、多维数组多维数组的类型是:numpy.ndarray。使用numpy.array方法以list或tuple变量为参数产生一维数组:复制代码代码如下:printnp.array([1,2,3,4])[1234]printnp.array((1.2,2,3,4))[1.22.3.4.]printtype(np.array((1.2,2,3,4)))type'numpy.ndarray'以list或tuple变量为元素产生二维数组:复制代码代码如下:printnp.array([[1,2],[3,4]])[[12][34]]生成数组的时候,可以指定数据类型,例如numpy.int32,numpy.int16,andnumpy.float64等:复制代码代码如下:printnp.array((1.2,2,3,4),dtype=np.int32)[1234]使用numpy.arange方法复制代码代码如下:printnp.arange(15)[01234567891011121314]printtype(np.arange(15))type'numpy.ndarray'printnp.arange(15).reshape(3,5)[[01234][56789][1011121314]]printtype(np.arange(15).reshape(3,5))type'numpy.ndarray'使用numpy.linspace方法例如,在从1到3中产生9个数:复制代码代码如下:printnp.linspace(1,3,9)[1.1.251.51.752.2.252.52.753.]使用numpy.zeros,numpy.ones,numpy.eye等方法可以构造特定的矩阵例如:复制代码代码如下:printnp.zeros((3,4))[[0.0.0.0.][0.0.0.0.][0.0.0.0.]]printnp.ones((3,4))[[1.1.1.1.][1.1.1.1.][1.1.1.1.]]printnp.eye(3)[[1.0.0.][0.1.0.][0.0.1.]]创建一个三维数组:复制代码代码如下:printnp.zeros((2,2,2))[[[0.0.][0.0.]][[0.0.][0.0.]]]获取数组的属性:复制代码代码如下:a=np.zeros((2,2,2))printa.ndim#数组的维数3printa.shape#数组每一维的大小(2,2,2)printa.size#数组的元素数8printa.dtype#元素类型float64printa.itemsize#每个元素所占的字节数8数组索引,切片,赋值示例:复制代码代码如下:a=np.array([[2,3,4],[5,6,7]])printa[[234][567]]printa[1,2]7printa[1,:][567]printa[1,1:2][6]a[1,:]=[8,9,10]printa[[234][8910]]使用for操作元素复制代码代码如下:forxinnp.linspace(1,3,3):...printx...1.02.03.0基本的数组运算先构造数组a、b:复制代码代码如下:a=np.ones((2,2))b=np.eye(2)printa[[1.1.][1.1.]]printb[[1.0.][0.1.]]数组的加减乘除:复制代码代码如下:printa2[[FalseFalse][FalseFalse]]printa+b[[2.1.][1.2.]]printa-b[[0.1.][1.0.]]printb*2[[2.0.][0.2.]]print(a*2)*(b*2)[[4.0.][0.4.]]printb/(a*2)[[0.50.][0.0.5]]print(a*2)**4[[16.16.][16.16.]]使用数组对象自带的方法:复制代码代码如下:a.sum()4.0a.sum(axis=0)#计算每一列(二维数组中类似于矩阵的列)的和array([2.,2.])a.min()1.0a.max()1.0使用numpy下的方法:复制代码代码如下:np.sin(a)array([[0.84147098,0.84147098],[0.84147098,0.84147098]])np.max(a)1.0np.floor(a)array([[1.,1.],[1.,1.]])np.exp(a)array([[2.71828183,2.71828183],[2.71828183,2.71828183]])np.dot(a,a)##矩阵乘法array([[2.,2.],[2.,2.]])合并数组使用numpy下的vstack和hstack函数:复制代码代码如下:a=np.ones((2,2))b=np.eye(2)printnp.vstack((a,b))[[1.1.][1.1.][1.0.][0.1.]]printnp.hstack((a,b))[[1.1.1.0.][1.1.0.1.]]看一下这两个函数有没有涉及到浅拷贝这种问题:复制代码代码如下:c=np.hstack((a,b))printc[[1.1.1.0.][1.1.0.1.]]a[1,1]=5b[1,1]=5printc[[1.1.1.0.][1.1.0.1.]]可以看到,a、b中元素的改变并未影响c。深拷贝数组数组对象自带了浅拷贝和深拷贝的方法,但是一般用深拷贝多一些:复制代码代码如下:a=np.ones((2,2))b=abisaTruec=a.copy()#深拷贝cisaFalse基本的矩阵运算转置:复制代码代码如下:a=np.array([[1,0],[2,3]])printa[[10][23]]printa.transpose()[[12][03]]迹:复制代码代码如下:printnp.trace(a)4numpy.linalg模块中有很多关于矩阵运算的方法:复制代码代码如下:importnumpy.linalgasnplg特征值、特征向量:复制代码代码如下:printnplg.eig(a)(array([3.,1.]),array([[0.,0.70710678],[1.,-0.70710678]]))
本文标题:Python中的Numpy入门教程
链接地址:https://www.777doc.com/doc-2853878 .html