【问题标题】:Solve Over-determined sparse matrix in Scipy (from Matlab to Python)在 Scipy 中求解超定稀疏矩阵(从 Matlab 到 Python)
【发布时间】:2016-01-29 09:18:15
【问题描述】:

给定一个大型稀疏矩阵 A,它是带状或三对角线(无论如何称为)和一个向量 f,我想求解 Z,其中 AZ = f。

有 6 条对角线,此处未清楚显示。

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 lsqrlsmr 解决 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


【解决方案1】:

这看起来很适合 solve_banded

不幸的是,提供带状矩阵的接口有点复杂。您可以先将稀疏矩阵转换为 DIA 格式,然后从那里开始工作。

【讨论】:

    猜你喜欢
    • 2016-11-21
    • 2014-02-08
    • 2022-08-18
    • 2023-04-10
    • 1970-01-01
    • 2017-03-31
    • 2013-11-13
    • 2017-03-26
    • 2015-05-08
    相关资源
    最近更新 更多