【发布时间】:2016-01-29 09:18:15
【问题描述】:
给定一个大型稀疏矩阵 A,它是带状或三对角线(无论如何称为)和一个向量 f,我想求解 Z,其中 AZ = f。
A 的 M 行多于 N 列(仅增加 1,M ~= N),因此它是过度确定的。这是源 Matlab 代码,我想将其转换为 Scipy 等效代码。
Matlab
A = A(:,2:end); #less one column
f = f(:);
Z = A\f;
Z = [0;-Z];
Z = reshape(Z,H,W);
Z = Z - min(Z(:));
我对 Scipy 的尝试给了我这个,但是用 scipy.sparse.linalg lsqr 和 lsmr 解决 Z 比 Matlab 慢很多 \ 并且没有给出足够好的解决方案。 A 被创建为 csr_matrix。
Python
A = A[:,1:]
f = f.flatten(1)
Z = la.lsqr(A, f, atol=1e-6, btol=1e-6)
#Z = la.lsmr(A, f) # the other method i used
Z = Z[0]
Z = np.append([0], np.negative(Z))
Z = np.reshape(Z, (height, width), order='F').copy()
Z = Z - Z.flatten(1).min()
谁能推荐一个更好的替代方案来解决 Z,它和 Matlab 一样有效和快速?
【问题讨论】:
-
MATLAB 为 A\b 的稀疏矩阵选择求解器,如下所示:uk.mathworks.com/help/releases/R2015b/matlab/ref/…。哪个求解器用于您的矩阵?
-
嗨@AnderBiguri,根据流程图,我认为这将是QR求解器。有没有办法在 Matlab 上进行检查?
-
不,没有,但看来你是对的。
-
@AnderBiguri,好的,谢谢。在这种情况下,是否存在 scipy sparse qr?
-
我认为是 lsqr。
标签: python matlab scipy linear-algebra sparse-matrix