You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NumPy中右矩阵除法:比np.linalg.inv()更优的实现方式?

NumPy中求解右矩阵除法xA=B的最优方法

要高效计算右矩阵除法对应的 ( x = BA^{-1} )(其中A、B是N×N可逆方阵),不要直接用 ( B @ np.linalg.inv(A) ),可以通过转置将问题转化为左矩阵除法,复用np.linalg.solve的高效实现,这是最快且数值最稳定的方式。

核心思路

对原式 ( xA = B ) 两边取转置,得到:

( A^T x^T = B^T )

这就变成了标准的左矩阵除法形式 ( Ax = B ),直接用np.linalg.solve求解转置后的方程,再将结果转置回来即可得到x。

实现代码

import numpy as np

# 给定N×N可逆方阵A、B
x = np.linalg.solve(A.T, B.T).T

为什么这比直接求逆更快?

  • np.linalg.solve依赖LU分解等数值算法,计算效率远高于先求逆再做矩阵乘法——求逆本身就等价于一次solve操作,再额外做矩阵乘法会增加不必要的计算量。
  • 直接求逆容易引入更大的数值误差,而solve的数值稳定性更好,转置操作本身几乎没有额外开销。

性能对比示例

对于大型矩阵,差异会非常明显:

import time

# 生成2000×2000的随机可逆矩阵
N = 2000
A = np.random.rand(N, N)
B = np.random.rand(N, N)

# 方法1:转置+solve+转置
start = time.perf_counter()
x1 = np.linalg.solve(A.T, B.T).T
print(f"转置+solve耗时: {time.perf_counter() - start:.4f}s")

# 方法2:逆矩阵相乘
start = time.perf_counter()
x2 = B @ np.linalg.inv(A)
print(f"逆矩阵相乘耗时: {time.perf_counter() - start:.4f}s")

# 验证结果一致性(浮点精度内相等)
print(f"最大误差: {np.max(np.abs(x1 - x2)):.10f}")

运行后你会看到,转置+solve的耗时通常只有逆矩阵相乘的一半左右,且结果误差极小。

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 18:42:38