Matlab的numpy反斜杠“ \”

时间:2019-12-19 16:15:05

标签: python matlab numpy

最后,我正在使用solve / spsolve / lstsq,试图找出如何在numpy中进行mldivide。

我写的代码如下

rows = arange(1,636)
A = sparse.coo_matrix((data, (rows, rows)
data is a big calculation, that is correctly as I can compare this with MatLab. 
But so, that A is a squared and diagonal matrix.

b = np.zeros([636, 1])
b[325] = -1

x = sparse.linalg.spsolve(A,b)
x = np.linalg.solve(A.todense(), b)

解决就给我

[-6.31616408e-01 -1.73335241e-01  4.50265452e-01 -3.43911779e-01
 -4.12256958e-01 ... 
-7.63274590e-04  4.37566396e-02
  1.65209630e-02 -1.66623184e-02  3.77960007e-02  1.15010875e-01]

正如我在MatLab中看到的那样,虽然我期望结果是n e2倍。

现在我的问题是,我读了Numpy vs mldivide,"\" matlab operator这个问题,并尝试了pinv (A) * b的方法,这给了我这样的感觉:

641.913965139625
652.5747314767242
336.84397488947764
458.32158095264714
479.75199577358404 

这些值仍然不是MatLab给我的。 (Matlab给出-101.49,-100.51、22.04,-75.77和-100.52)

我认为这与numpy如何选择其“方法”有关。现在有趣的是,当我尝试使用其他设置进行此操作(这导致较小的24x24矩阵而不是636x636的矩阵)时,我执行获得相同的MatLab值。我想这可能很幸运,但是:

是否可以告诉NumPy如何采用MatLab选择的“特殊解决方案”?

0 个答案:

没有答案