我正在尝试将包含 \ 运算符的代码从 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(使用前将#替换为@)