2010-07-20 41 views

回答

21

就个人而言,我很少会为只有25%非零的数组进行稀疏操作。如果你不相信我,请自己尝试一下。

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%的非零值对于任何增益都不足够“稀疏”。

4

编辑 - 误解了问题。

由于稀疏矩阵算法具有75%的稀疏性,您可以很好地看到显着的性能提升。我会说这绝对值得一试。 (例如,您每次执行矩阵向量乘法操作时,都会大大减少操作次数)。这两个地方可以节省内存(减少内存使用量的四分之一)和操作需要)。在你的情况下,减轻因素可能是你矩阵的大小。转向稀疏矩阵运算,您通常会失去使用密集矩阵看到的良好缓存特性。因此,通常有一个从密集到稀疏的转变导致效率增加的阈值。