Python NumPy 矩阵运算:转置、加法、乘法与切片实战指南
Python NumPy 矩阵运算:转置、加法、乘法与切片实战指南
数学建模、科学计算和数据分析常依赖高效操作二维数据。Python 中矩阵可用普通列表创建,更强大的是用 NumPy 库。本指南演示最常见矩阵操作,附清晰代码示例和最佳实践提示。
什么是矩阵?
矩阵是按行列组织的数字(或其他数据类型)矩形数组。Python 核心语言无专用矩阵类型,但可用嵌套列表或 NumPy 的 ndarray 表示,后者提供快速向量化操作。
用嵌套列表创建矩阵
嵌套列表是构建矩阵最简单方式。每个内层列表代表一行:
# 3x3 矩阵
M1 = [[8, 14, -6], [12, 7, 4], [-11, 3, 21]]
print(M1)
输出:
[[8, 14, -6], [12, 7, 4], [-11, 3, 21]]
读取数据
通过行列索引访问元素。打印每行最后一个元素:
for row in M1:
print(row[-1])
输出:
-6 4 21
矩阵加法
两矩阵形状相同时,元素级加法直观:
M2 = [[3, 16, -6], [9, 7, -4], [-1, 3, 13]]
# 结果矩阵
M3 = [[M1[i][j] + M2[i][j] for j in range(len(M1[0]))] for i in range(len(M1))]
print(M3)
输出:
[[11, 30, -12], [21, 14, 0], [-12, 6, 34]]
元素级乘法
同样可对应元素相乘:
M3 = [[M1[i][j] * M2[i][j] for j in range(len(M1[0]))] for i in range(len(M1))]
print(M3)
输出:
[[24, 224, 36], [108, 49, -16], [11, 9, 273]]
用 NumPy 进行高效矩阵运算
NumPy 提供专用数组类型和丰富向量化操作。用 pip install numpy 安装并按 np 导入:
import numpy as np
创建矩阵
M1 = np.array([[5, -10, 15], [3, -6, 9], [-4, 8, 12]])
print(M1)
输出:
[[ 5 -10 15] [ 3 -6 9] [-4 8 12]]
基本运算
- 加法:
M3 = M1 + M2 - 减法:
M3 = M1 - M2 - 点积(矩阵乘法):
M3 = M1.dot(M2) - 转置:
M2 = M1.transpose()
示例:矩阵点积
M1 = np.array([[3, 6], [5, -10]])
M2 = np.array([[9, -18], [11, 22]])
print(M1.dot(M2))
输出:
[[ 93 78] [-65 -310]]
切片
用 array[row_start:row_end, col_start:col_end] 切片行列:
M = np.array([[2, 4, 6, 8, 10],
[3, 6, 9, -12, -15],
[4, 8, 12, 16, -20],
[5, -10, 15, -20, 25]])
print(M[1:3, 1:4]) # 第 1-2 行,第 1-3 列
print(M[:, 3]) # 所有行,第 4 列
print(M[:1, :]) # 第 1 行,所有列
print(M[:3, :2]) # 前 3 行,前 2 列
输出:
[[ 6 9 -12] [ 8 12 16]] [ 8 -12 16 -20] [[ 2 4 6 8 10]] [[ 2 4] [ 3 6] [ 4 8]]
访问行和列
# 行
print(M[0]) # 第一行
print(M[-1]) # 最后一行
# 列
print(M[:, 0]) # 第一列
print(M[:, -1])# 最后一列
核心要点
- Python 列表嵌套适合小矩阵,但 NumPy
ndarray扩展性好得多。 - 元素级运算(+、-、*、/)直接作用于 NumPy 数组。
- 真正矩阵乘法用
np.dot()或@运算符。 - 切片提供强大方式提取子矩阵或特定行列。
- 操作前始终确保矩阵形状兼容。
Python
- C++ 数组完全指南:声明、初始化、多维数组与指针技巧
- 精通 Python 字典:创建、操作与进阶技巧
- Python print() 函数完全指南:基础用法、空行打印与自定义结束符
- Python str.count() 完全指南:统计字符与子串出现次数实战
- Python format() 字符串格式化完全指南:占位符、格式化规范、类与字典应用
- Python 字符串 find() 方法完全指南:语法、参数、替代方案与计数技巧
- 精通 Python Lambda 函数:实用示例与最佳实践
- Python abs() 函数:计算数字与复数的绝对值
- Python round() 函数详解与实战示例
- 精通 Python range() 函数:从基础到高级用法
- 精通 Python map() 函数:语法、示例与最佳实践
- Python timeit():精准测量代码执行时间与实战示例