最后,我正在使用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选择的“特殊解决方案”?