标题 | Python中的Numpy入门教程 |
内容 | 这篇文章主要介绍了Python中的Numpy入门教程,着重讲解了矩阵中的数组操作,需要的朋友可以参考下 1、Numpy是什么 很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。如果接触过matlab、scilab,那么numpy很好入手。在以下的代码示例中,总是先导入了numpy: 代码如下: >>>importnumpyasnp >>>printnp.version.version 1.6.2 2、多维数组 多维数组的类型是: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#数组的维数 3 >>>printa.shape#数组每一维的大小 (2,2,2) >>>printa.size#数组的元素数 8 >>>printa.dtype#元素类型 float64 >>>printa.itemsize#每个元素所占的字节数 8 数组索引,切片,赋值 示例: 代码如下: >>>a=np.array([[2,3,4],[5,6,7]]) >>>printa [[234] [567]] >>>printa[1,2] 7 >>>printa[1,:] [567] >>>printa[1,1:2] [6] >>>a[1,:]=[8,9,10] >>>printa [[234] [8910]] 使用for操作元素 代码如下: >>>forxinnp.linspace(1,3,3): ...printx ... 1.0 2.0 3.0 基本的数组运算 先构造数组a、b: 代码如下: >>>a=np.ones((2,2)) >>>b=np.eye(2) >>>printa [[1.1.] [1.1.]] >>>printb [[1.0.] [0.1.]] 数组的加减乘除: 代码如下: >>>printa>2 [[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.0 >>>a.sum(axis=0)#计算每一列(二维数组中类似于矩阵的列)的和 array([2.,2.]) >>>a.min() 1.0 >>>a.max() 1.0 使用numpy下的方法: 代码如下: >>>np.sin(a) array([[0.84147098,0.84147098], [0.84147098,0.84147098]]) >>>np.max(a) 1.0 >>>np.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]=5 >>>b[1,1]=5 >>>printc [[1.1.1.0.] [1.1.0.1.]] 可以看到,a、b中元素的改变并未影响c。 深拷贝数组 数组对象自带了浅拷贝和深拷贝的方法,但是一般用深拷贝多一些: 代码如下:>>>a=np.ones((2,2)) >>>b=a >>>bisa True >>>c=a.copy()#深拷贝 >>>cisa False 基本的矩阵运算 转置: 代码如下: >>>a=np.array([[1,0],[2,3]]) >>>printa [[10] [23]] >>>printa.transpose() [[12] [03]] 迹: 代码如下:>>>printnp.trace(a) 4 numpy.linalg模块中有很多关于矩阵运算的方法: 代码如下: >>>importnumpy.linalgasnplg 特征值、特征向量: 代码如下: >>>printnplg.eig(a) (array([3.,1.]),array([[0.,0.70710678], [1.,-0.70710678]]))3、矩阵 numpy也可以构造矩阵对象,这里不做讨论。 |
随便看 |
|
在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。