NumPy 逆矩阵

逆矩阵是什么?

在线性代数中,逆矩阵是一个核心概念。对于一个可逆矩阵,其逆矩阵与其相乘的结果为单位矩阵。逆矩阵具有以下性质:

  • 只有方阵才有逆矩阵。
  • 若矩阵 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() 函数来计算其伪逆矩阵。伪逆矩阵是一种广义的逆矩阵,即使对于不可逆的矩阵也能提供一个近似的解。

上一篇: NumPy 矩阵相乘

下一篇: NumPy 求和

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号