左矩阵除法和 Numpy 求解

2024-01-09

我正在尝试将包含 \ 运算符的代码从 Matlab (Octave) 转换为 Python。示例代码

B = [2;4]
b = [4;4]
B \ b

这有效并产生 1.2 作为答案。使用此网页

http://mathesaurus.sourceforge.net/matlab-numpy.html http://mathesaurus.sourceforge.net/matlab-numpy.html

我将其翻译为:

import numpy as np
import numpy.linalg as lin
B = np.array([[2],[4]])
b = np.array([[4],[4]])
print lin.solve(B,b)

这给了我一个错误:

numpy.linalg.linalg.LinAlgError: Array must be square

为什么 Matlab \ 可以处理 B 的非方阵?

有什么解决办法吗?


From MathWorks 文档 http://www.mathworks.com/help/techdoc/ref/mldivide.html对于左矩阵除法:

如果 A 是一个 m×n 矩阵,其中 m ~= n,B 是一个列向量,其中 m 分量,或具有多个此类列的矩阵,则 X = A\B 是 欠定或超定的最小二乘解 方程组 AX = B。换句话说,X 最小化范数(A*X - B), 向量 AX - B 的长度。

numpy 中的等价物是np.linalg.lstsq http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html#numpy-linalg-lstsq:

In [15]: B = np.array([[2],[4]])

In [16]: b = np.array([[4],[4]])

In [18]: x,resid,rank,s = np.linalg.lstsq(B,b)

In [19]: x
Out[19]: array([[ 1.2]])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

左矩阵除法和 Numpy 求解 的相关文章

随机推荐