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

针对np.linalg.pinv,是否存在类似np.linalg.solve的等价求解函数?

伪逆对应的类solve函数问题解答

对于线性方程组A @ x = b,我们知道有两种常见求解方式:

  • 显式计算逆矩阵再作用于b:x = np.linalg.inv(A) @ b
  • 使用专用求解函数:x = np.linalg.solve(A, b)

后者因性能更优、数值稳定性更强,通常是优先选择的方案。针对伪逆的场景,其实不需要单独的psolve函数,np.linalg.lstsq(A, b, rcond=None)就完全等价于np.linalg.pinv(A) @ b,而且它的表现同样比直接计算伪逆再乘b更好。

np.linalg.lstsq本质是求解最小二乘问题,寻找能使||A@x - b||_2(欧几里得范数)最小的x:

  • 当A是方阵且可逆时,它的结果和solve完全一致;
  • 当A不可逆或为非方阵时,它返回的解就是伪逆乘以b的结果,而且在解不唯一的情况下,会自动选择范数最小的那个解,这完全符合伪逆的定义。

举个实际代码例子验证:

import numpy as np

# 构造一个非方阵的A和向量b
A = np.array([[1, 2], [3, 4], [5, 6]])
b = np.array([7, 8, 9])

# 两种方式计算
x_pinv = np.linalg.pinv(A) @ b
x_lstsq = np.linalg.lstsq(A, b, rcond=None)[0]

# 验证结果一致
print(np.allclose(x_pinv, x_lstsq))  # 输出 True

所以实际开发中,优先使用np.linalg.lstsq来替代pinv(A) @ b,就像用solve替代inv(A) @ b的思路一样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:27:09