趋近智
矩阵逆()在求解 形式的线性方程组中具有理论作用。这里展示了如何使用NumPy计算逆矩阵。尽管在实际中,直接计算逆矩阵通常不是求解方程组的首选方法,但知道如何计算它是一项基本技能。
numpy.linalg 模块NumPy作为Python数值计算的主要库,包含一个专门用于线性代数运算的子模块:numpy.linalg。该模块包含用于矩阵分解、特征值计算、求解线性系统以及(对我们目前来说很重要)计算矩阵逆的函数。
inv() 计算逆矩阵要计算方阵的逆矩阵,我们使用 numpy.linalg.inv() 函数。它接受一个方阵(以NumPy数组表示)作为输入,并返回其逆矩阵,同样以NumPy数组形式。
请记住,只有方阵才有逆矩阵,并且即使是方阵,也只有当它们是非奇异的(可逆的)时才有逆矩阵。
让我们看一个例子。考虑以下 2x2 矩阵 :
我们可以在NumPy中表示这个矩阵并计算其逆矩阵:
import numpy as np
# 定义矩阵 A
A = np.array([[4, 7],
[2, 6]])
print("矩阵 A:")
print(A)
# 计算 A 的逆矩阵
try:
A_inv = np.linalg.inv(A)
print("\nA 的逆矩阵 (A_inv):")
print(A_inv)
except np.linalg.LinAlgError as e:
print(f"\n无法计算逆矩阵: {e}")
执行这段代码将输出原始矩阵 及其计算出的逆矩阵 。
矩阵逆 的一个规定性质是,当它与原始矩阵 相乘时,会得到单位矩阵 。即:
我们可以使用NumPy的矩阵乘法功能来验证这一点。请记住,@ 运算符执行矩阵乘法(或者您可以使用 np.dot()):
# 验证 A * A_inv
identity_check_1 = A @ A_inv
print("\n验证 (A @ A_inv):")
print(identity_check_1)
# 验证 A_inv * A
identity_check_2 = A_inv @ A
print("\n验证 (A_inv @ A):")
print(identity_check_2)
# 创建预期中的单位矩阵
I = np.identity(A.shape[0]) # A.shape[0] 给出行数(此处为 2)
print("\n单位矩阵 I:")
print(I)
您应该会看到 identity_check_1 和 identity_check_2 都产生一个与 2x2 单位矩阵非常接近的矩阵:
您可能会注意到,结果矩阵并非完全是单位矩阵。代替完美的零,您可能会看到非常小的数字,例如 2.22044605e-16(即 )。这是计算机处理非整数计算(称为浮点运算)的正常结果。这些微小的差异通常可以忽略不计。
如果您需要以编程方式检查两个矩阵是否在一定容差范围内相等,NumPy 提供了 np.allclose() 函数:
# 检查 A @ A_inv 是否接近单位矩阵 I
are_close = np.allclose(A @ A_inv, np.identity(A.shape[0]))
print(f"\nA @ A_inv 在数值上是否接近 I? {are_close}") # 输出应为 True
如果我们尝试计算一个没有逆矩阵(即奇异矩阵)的矩阵的逆,会发生什么?让我们尝试一个矩阵,其中一列是另一列的倍数,从而使其成为奇异矩阵:
# 定义一个奇异矩阵 B
B = np.array([[1, 2],
[2, 4]])
print("\n矩阵 B (奇异):")
print(B)
# 尝试计算 B 的逆矩阵
try:
B_inv = np.linalg.inv(B)
print("\nB 的逆矩阵:")
print(B_inv)
except np.linalg.LinAlgError as e:
print(f"\n无法计算 B 的逆矩阵: {e}")
当您运行这段代码时,NumPy 将检测到该矩阵是奇异矩阵,并引发 LinAlgError: Singular matrix 错误。这是NumPy告诉您给定矩阵 B 没有逆矩阵的方式。这种行为正确对应了“可逆条件”部分中讨论的数学性质。
计算逆矩阵是一项基本操作,np.linalg.inv() 提供了一种直接的方法来完成它。然而,请记住,对于求解方程组 ,直接使用逆矩阵()有时在数值上不如使用专门的求解器稳定和高效,我们将在下一节中讨论这些求解器。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造