NumPy通过ndarray实现高效矩阵运算,支持元素级操作及使用@、np.dot()进行矩阵乘法,并提供np.linalg模块用于求逆、解线性方程组和特征值分析。

NumPy是Python中进行高效矩阵运算的核心库。要用它进行矩阵运算,最直接的方式是利用其数组(
ndarray
np.dot()
@
np.linalg
NumPy处理矩阵运算的核心在于它的
ndarray
np.array
比如,创建一个2x3的矩阵A和一个3x2的矩阵B:
import numpy as np
A = np.array([[1, 2, 3],
[4, 5, 6]])
B = np.array([[7, 8],
[9, 10],
[11, 12]])
print("矩阵A:\n", A)
print("矩阵B:\n", B)元素级运算 (Element-wise Operations): NumPy默认的
*
C = np.array([[1, 2], [3, 4]])
D = np.array([[5, 6], [7, 8]])
print("元素级乘法 C * D:\n", C * D)
# 结果是 [[ 5 12] [21 32]]加减法也是元素级的:
立即学习“Python免费学习笔记(深入)”;
print("元素级加法 A + A:\n", A + A)
print("元素级减法 A - A:\n", A - A)矩阵乘法 (Matrix Multiplication): 这是很多人初学NumPy时容易混淆的地方。标准的矩阵乘法,也就是线性代数中的“点积”,在NumPy中有几种实现方式:
np.dot()
C_dot = np.dot(A, B)
print("使用np.dot()进行矩阵乘法 A . B:\n", C_dot)
# 结果是一个2x2的矩阵@
np.matmul()
C_at = A @ B
print("使用@运算符进行矩阵乘法 A @ B:\n", C_at)
# 结果与np.dot()相同np.matmul()
np.dot()
np.matmul()
np.dot()
@
C_matmul = np.matmul(A, B)
print("使用np.matmul()进行矩阵乘法 A matmul B:\n", C_matmul)
# 结果与上述两种方法相同选择哪种方式?个人经验是,对于二维矩阵乘法,
@
np.dot()
np.matmul()
在NumPy中,向量通常被表示为一维数组,或者通过
reshape
我们先定义一个向量:
v = np.array([1, 2, 3])
print("向量v:\n", v)矩阵乘以向量: 如果想用矩阵A(2x3)乘以向量v(3),
np.dot()
@
# A是2x3,v是长度3的一维数组。NumPy会将其视为3x1的列向量进行乘法
result_Av = A @ v
print("矩阵A乘以向量v (A @ v):\n", result_Av)
# 结果是一个长度为2的一维数组,等同于2x1的列向量向量乘以矩阵: 如果想用向量v(3)乘以矩阵A(2x3),这在数学上是不直接允许的(因为v是1x3,A是2x3,内维度不匹配)。但如果你想让v作为一个行向量(1x3)去乘以A的转置(3x2),那就可以。
# 将v明确地表示为行向量 (1x3)
v_row = v.reshape(1, -1) # 或 np.array([v])
print("行向量v_row:\n", v_row)
# 矩阵A的转置是3x2
A_T = A.T
print("矩阵A的转置A_T:\n", A_T)
# 现在可以进行乘法:(1x3) @ (3x2) -> 1x2
result_vA_T = v_row @ A_T
print("行向量v_row乘以A的转置 (v_row @ A.T):\n", result_vA_T)这里需要注意,NumPy在处理一维数组时,其“形状”是灵活的。当它作为点积的参数时,它会根据另一个参数的形状自动调整。这种隐式转换有时会让人困惑,所以显式地使用
reshape
[:, np.newaxis]
np.linalg
np.linalg
1. 逆矩阵 (Inverse Matrix): 计算方阵的逆。如果矩阵不可逆(奇异矩阵),会抛出
LinAlgError
M = np.array([[1, 2],
[3, 4]])
try:
M_inv = np.linalg.inv(M)
print("矩阵M的逆:\n", M_inv)
# 验证:M @ M_inv 应该接近单位矩阵
print("M @ M_inv:\n", M @ M_inv)
except np.linalg.LinAlgError as e:
print(f"矩阵不可逆: {e}")2. 求解线性方程组 (Solve Linear Equations): 给定线性方程组 Ax = b,我们可以用
np.linalg.solve(A, b)
# 求解方程组:
# x + 2y = 5
# 3x + 4y = 11
A_eq = np.array([[1, 2],
[3, 4]])
b_eq = np.array([5, 11])
x_solution = np.linalg.solve(A_eq, b_eq)
print("线性方程组的解x:\n", x_solution)
# 验证:A_eq @ x_solution 应该接近b_eq
print("A_eq @ x_solution:\n", A_eq @ x_solution)**3. 特征值和特征
以上就是Python怎么用NumPy进行矩阵运算_NumPy矩阵乘法与线性代数运算的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号