Python NumPy数组与矩阵操作完全指南

云舒
云舒
发布时间:2026-10-13| 2人浏览过
原创

本文详细介绍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]]) 

总结

以上就是本文的全部内容,希望这些内容能对各位的学习或工作有所帮助。如有任何疑问,欢迎留言交流,感谢大家对本站的支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。