逆矩阵是什么?
在线性代数中,逆矩阵是一个核心概念。对于一个可逆矩阵,其逆矩阵与其相乘的结果为单位矩阵。逆矩阵具有以下性质:
- 只有方阵才有逆矩阵。
- 若矩阵 A 可逆,则其逆矩阵是唯一的。
- 若矩阵 A 可逆,则其逆矩阵的逆矩阵为 A。
- 若矩阵 A 和 B 均可逆,则 (AB)^-1 = B^-1 A^-1。
逆矩阵在很多领域都有应用,主要包括以下方面:
- 求解线性方程组。
- 矩阵分解。
- 机器学习。
- 三维图形变换。
NumPy 逆矩阵
在 NumPy 中,我们可以使用 numpy.linalg.inv() 函数来计算一个方阵的逆矩阵。
语法:
numpy.linalg.inv(arr)说明:
参数 arr 是一个可逆的方阵(本质上是一个 “NumPy 二维数组” )。
示例 1:NumPy 求逆矩阵
import numpy as np
# 定义可逆矩阵
arr = np.array([[1, 0], [0, 2]])
# 计算逆矩阵
result = np.linalg.inv(arr)
print('原矩阵:\n', arr)
print('逆矩阵:\n', np.round(result, 2))
# 验证:原矩阵与其逆矩阵的乘积应为单位矩阵
identity_mat = np.dot(arr, result)
print('验证相乘结果:\n', np.round(identity_mat, 2))运行结果如下。
原矩阵:
[[1 0]
[0 2]]
逆矩阵:
[[1. 0. ]
[0. 0.5]]
验证相乘结果:
[[1. 0.]
[0. 1.]]分析:
对角矩阵的逆矩阵是其主对角线元素各自的倒数。通过 np.dot() 函数,我们可以验证 arr 和其逆矩阵的乘积是一个单位矩阵。
示例 2:处理不可逆矩阵(异常处理)
import numpy as np
arr = np.array([[1, 1], [1, 1]]) # 秩亏矩阵
try:
result = np.linalg.inv(arr)
except np.linalg.LinAlgError as e:
print('求逆失败:', e)
# 使用伪逆作为替代方案
result = np.linalg.pinv(arr)
print(result)运行结果如下。
求逆失败: Singular matrix
[[0.25 0.25]
[0.25 0.25]]分析:
为了避免程序因计算不可逆矩阵而崩溃,我们应该使用 try except 语句来捕获 LinAlgError 异常。
在实际开发中,直接计算逆矩阵(np.linalg.inv())可能会带来浮点数误差和性能问题,尤其是在以下场景中:
- 求解线性方程组:如果你需要求解 Ax = B,直接计算 x = A⁻¹B 并不是最佳选择。我们更推荐使用 np.linalg.solve() 函数,它在数值上更稳定且更高效。
- 处理奇异矩阵(不可逆矩阵):对于奇异矩阵,我们可以使用 np.linalg.pinv() 函数来计算其伪逆矩阵。伪逆矩阵是一种广义的逆矩阵,即使对于不可逆的矩阵也能提供一个近似的解。
