【问题标题】:MATLAB sparsity - Is there a speed advantage in my situation?MATLAB 稀疏性 - 在我的情况下有速度优势吗?
【发布时间】:2015-11-02 08:03:01
【问题描述】:

我有一个MxM 矩阵S,它的对角线上的元素为零,其他地方都非零。我需要制作一个更大的块矩阵。这些块的大小为NxN,其中有MxM

(i,j)th 块将是 S(i,j)I,其中 I=eye(N)NxN 标识。这个矩阵肯定是稀疏的,SM^2-M 非零条目,我的块矩阵将有N(M^2-M)(NM)^2 或大约1/N% 非零条目,但我会将它添加到另一个@987654335 @矩阵,我不希望是稀疏的。

由于我要将块矩阵添加到完整矩阵中,尝试以“稀疏”方式编写代码是否会提高速度?我一直来回走动,但是我的想法是:即使我将S 转换为稀疏块矩阵的代码效率不高,当我告诉它将完整和稀疏矩阵相加时,MATLAB 不会知道它只需要迭代在非零元素上?我已经接受过培训,for 循环在 MATLAB 中很慢,而repmat 和用零填充之类的东西更快,但我的猜测是,最快的做法是根本不构建块矩阵,但是编写代码,以稀疏的方式将(小矩阵)S 的条目添加到我的另一个(大,完整)矩阵中。如果我要学习如何使用稀疏代码构建块矩阵(比完全构建它并将其传递给sparse 更快),那么该代码应该能够以稀疏的方式为我做加法,甚至不需要需要构建块矩阵吗?

【问题讨论】:

  • NM 有多大? (注意:我认为你会有N*(M^2-M) 非零条目而不是M^2-M。)
  • 如果只有对角线为零,那么这不是很稀疏。与稀疏矩阵相关的额外开销将导致它在这种情况下需要更多内存。
  • This answer 建议您需要分配低于 25% 的稀疏矩阵才能看到性能的改进。但实际上,我认为确定它是否会对您的情况产生影响的唯一方法是实现您正在运行的任何算法的最小版本并对其计时。在不知道您对矩阵执行的确切操作的情况下,我认为我们不可能提供确凿的答案。
  • 正如他们在这里所说的:如果您的非零数量大于条目的 25%,请不要为稀疏而烦恼。
  • @BillBokeey Ohp...你是对的。 SM^2-M 非零条目,它将对应于 1 到 N 与我的新矩阵的非零条目。起初我希望能够处理多达N~1,000M~10,000,但快速计算表明我的完整NMxNM 矩阵将具有1e14 条目,即~100 TB

标签: performance matlab sparse-matrix


【解决方案1】:

如果你可以在内存中保留一个完整的 NMxNM 矩阵,那么就不要为稀疏运算而烦恼。事实上,在大多数情况下,A+B(A 满而 B 稀疏)比 A+B(A 和 B 都满)需要更长的时间。

【讨论】:

    【解决方案2】:

    根据您的描述,对于您的问题,使用 sparse 可能会更慢:

    如果您将稀疏矩阵 A 添加到完整矩阵 B 中,则结果是完整的,并且几乎可以肯定 A 稀疏没有任何优势。

    例如: n = 12000; A = 兰德(n,n); B1 = 兰德(n,n); B2 = spalloc(n, n, n*n); B2 尽可能稀疏,即全为零! 在我的机器上,A+B1 大约需要 0.23 秒,而 A + B2 大约需要 0.7 秒。

    基本上,对完整矩阵的操作使用经过疯狂优化的 BLAS/LAPACK 库调用。与稀疏相关的开销会使事情变得更糟,除非您处于稀疏非常有用的特殊情况。

    什么时候sparse超级有用?

    当矩阵的大小表明某些算法应该非常慢时,稀疏非常有用,但由于稀疏性(可能是特殊的矩阵结构),实际所需的计算数量要少几个数量级。

    示例:求解线性系统 A*x=b,其中 A 是块对角矩阵: As = 稀疏(rand(5, 5)); for(i=1:999) As = blkdiag(As, sparse(rand(5,5))); end %生成一个 5x5 块的 5000x5000 稀疏块对角矩阵

    Af = 完整(As); b = 兰德(5000, 1);

    在我的机器上,求解全矩阵(即 Af\b)上的线性系统大约需要 2.3 秒,而 As\b 需要 0.0012 秒。

    稀疏可能很棒,但它只对可以巧妙利用结构的大问题有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-18
      • 2016-05-11
      • 2015-09-02
      • 2020-07-04
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 2023-01-25
      相关资源
      最近更新 更多