稀疏与普通数组Matlab

时间:2010-07-20 17:02:16

标签: matlab performance sparse-matrix

在Matlab中,如果我仍然需要进行大量的计算,那么稀疏数组在什么位置比普通数组更好?大约25%的数组是非零?

2 个答案:

答案 0 :(得分:21)

就个人而言,对于只有25%非零的数组,我很少会使用sparse。如果您不相信我,请亲自尝试。

A = sprand(2000,2000,0.25);
tic,B = A*A;toc
Elapsed time is 1.771668 seconds.

Af = full(A);
tic,B = Af*Af;toc
Elapsed time is 0.499045 seconds.

作为稀疏矩阵的额外工作成本太高而不值得烦恼。现在用一个非常稀疏的矩阵来尝试它。

A = sprand(2000,2000,0.005);
Af = full(A);

tic,B = A*A;toc
Elapsed time is 0.037763 seconds.

tic,B = Af*Af;toc
Elapsed time is 0.446680 seconds.

当然,你自己的问题会有所不同,但情况并没有那么不同。对于使用真正稀疏矩阵的人来说,稀疏矩阵是一个真正的福音,但在大多数情况下,25%的非零对于任何增益都不够“稀疏”。

答案 1 :(得分:4)

编辑 - 误读了问题。

如果稀疏度为75%,您可以通过稀疏矩阵算法看到显着的性能提升。我说这绝对值得一试。

您将保存内存的两个位置(将内存使用量减少四倍)和操作(例如,每次执行矩阵向量乘法时,您将大大减少所需的操作数量)。您的情况下的缓解因素可能是矩阵的大小。移动到稀疏矩阵运算,通常会失去使用密集矩阵看到的漂亮缓存特性。因此,通常有一个阈值,从密集到稀疏的转变导致效率提高。