Python NumPy数组与矩阵操作完全指南
本文详细介绍Python中NumPy库的核心用法。涵盖ndarray多维数组的创建方法(array、arange、特殊矩阵)、关键属性(shape、dtype等)、索引切片、维度变换、组合分割以及matrix矩阵类的生成与逆运算,帮助开发者掌握科学计算基础。
前言
相信许多开发者已经有所耳闻,这里简要介绍NumPy。NumPy(Numerical Python)是Python中用于科学计算的第三方核心库。
NumPy提供了众多高级数值编程工具,包括矩阵数据类型、矢量处理功能以及高精度的运算库,专为严格的数字处理需求而设计。下文将详细解析Python中NumPy包的数组及相关操作,内容详实,请继续阅读。
一、数组简介
在NumPy中,最核心的数据结构是多维数组类型(numpy.ndarray)。
ndarray由两个主要部分组成:
- 实际存储的数据内容;
- 描述这些数据结构的元数据(metadata);
数组(即矩阵)的维度被称为axes,其维数称为rank。
ndarray具备以下重要属性:
ndarray.ndim:表示数组的维数,也即rank;ndarray.shape:表示数组各维度的大小,对于n行m列的矩阵,shape属性值为(n,m);ndarray.size:表示数组中元素的总数。ndarray.dtype:表示每个元素的数据类型,例如numpy.int32、numpy.int16或numpy.float64等;ndarray.itemsize:表示每个元素所占用的字节数。ndarray.data:指向存储数据的内存地址。
二、数组的使用
在使用NumPy之前,必须先导入模块,通常使用以下语句进行导入:
improt numpy as np #其中np为numpy的别名,是一种习惯用法
1. 使用array方法生成数组
array(数组)是NumPy中最基础的数据结构,其最关键属性为维度和元素类型。在NumPy中,可以便捷地创建各种类型的多维数组并执行基本操作。生成数组的方法主要有以下几种: 通过list或tuple变量生成一维数组:
>>> print np.array([1,2,3,4]) [1 2 3 4] >>> print np.array((1.2,2,3,4)) [ 1.2 2. 3. 4. ]
通过list或tuple变量作为元素,生成二维或多维数组:
>>> x = np.array(((1,2,3),(4,5,6))) >>> x array([[1, 2, 3], [4, 5, 6]]) >>> y = np.array([[1,2,3],[4,5,6]]) >>> y array([[1, 2, 3], [4, 5, 6]])
2. 使用numpy.arange方法生成数组
>>> print np.arange(15) [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14] >>> print type(np.arange(15)) <type 'numpy.ndarray'>
3. 使用内置函数生成特殊矩阵(数组)
零矩阵
>>> print np.zeros((3,4)) [[ 0. 0. 0. 0.] [ 0. 0. 0. 0.] [ 0. 0. 0. 0.]]
一矩阵
>>> print np.ones((3,4)) [[ 1. 1. 1. 1.] [1. 1. 1. 1.] [ 1. 1. 1. 1.]]
单位矩阵
>>> print np.eye(3) [[ 1. 0. 0.] [0. 1. 0.] [ 0. 0. 1.]]
4. 索引与切片
>>> x = np.array(((1,2,3),(4,5,6))) >>> x[1,2] #获取第二行第三列的数 6
>>> y=x[:,1] #获取第二列 >>> y array([2, 5])
其语法与Python标准语法一致,此处不再赘述示例。
5. 获取数组属性
>>> a = np.zeros((2,2,2)) >>> print a.ndim #数组的维数 3 >>> print a.shape #数组每一维的大小 (2, 2, 2) >>> print a.size #数组的元素数 8 >>> print a.dtype #元素类型 float64 >>> print a.itemsize #每个元素所占的字节数 8
6. 数组变换
将多维数组转换为一维:
>>> x array([[1, 2, 3], [4, 5, 6]]) >>> x.flatten() array([1, 2, 3, 4, 5, 6])
将一维数组转换为多维:
>>> print np.arange(15).reshape(3,5) #改变形状,将一维的改成三行五列 [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]]
转置操作:
>>> x array([[1, 2, 3], [4, 5, 6]]) >>> x.transpose() array([[1, 4], [2, 5], [3, 6]])
7. 数组组合
水平组合:
>>> y=x >>> numpy.hstack((x,y)) array([[1, 2, 3, 1, 2, 3], [4, 5, 6, 4, 5, 6]]
垂直组合
>>> numpy.vstack((x,y)) array([[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]])
使用concatenate函数可同时实现上述两种组合方式,通过指定axis参数进行控制,默认值为0,对应垂直组合。
>>> numpy.concatenate((x,y)) array([[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]) >>> numpy.concatenate((x,y),axis=1) array([[1, 2, 3, 1, 2, 3], [4, 5, 6, 4, 5, 6]])
8. 数组分割
垂直分割
>>> z array([[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]) >>> numpy.vsplit(z,2) #注意这里设置的分割数目必须可以被行数整除 [array([[1, 2, 3], [4, 5, 6]]), array([[1, 2, 3], [4, 5, 6]])]
水平分割
>>> numpy.hsplit(z,3) [array([[1], [4], [1], [4]]), array([[2], [5], [2], [5]]), array([[3], [6], [3], [6]])]
使用split函数可同时实现这两种效果,通过设置axis参数进行区分,原理与组合类似,此处不再演示。
三、矩阵
通过前述数组操作可知,NumPy中可通过数组模拟矩阵,但NumPy也提供了专门处理矩阵的数据结构——matrix。
1. 生成矩阵
>>> numpy.mat('1 2 3;4 5 6;7 8 9')
matrix([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
2. 数组与矩阵的相互转化
矩阵转为数组
>>> m=numpy.mat('1 2 3;4 5 6;7 8 9')
>>> numpy.array(m)
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
数组转为矩阵
>>> n=numpy.array(m) >>> numpy.mat(n) matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
3. 矩阵方法
求逆运算:
>>> m.I matrix([[ -4.50359963e+15, 9.00719925e+15, -4.50359963e+15], [ 9.00719925e+15, -1.80143985e+16, 9.00719925e+15], [ -4.50359963e+15, 9.00719925e+15, -4.50359963e+15]])
总结
以上就是本文的全部内容,希望这些内容能对各位的学习或工作有所帮助。如有任何疑问,欢迎留言交流,感谢大家对本站的支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













