2010-07-20 43 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%的稀疏性,您可以很好地看到顯着的性能提升。我會說這絕對值得一試。 (例如,您每次執行矩陣向量乘法操作時,都會大大減少操作次數)。這兩個地方可以節省內存(減少內存使用量的四分之一)和操作需要)。在你的情況下,減輕因素可能是你矩陣的大小。轉向稀疏矩陣運算,您通常會失去使用密集矩陣看到的良好緩存特性。因此,通常有一個從密集到稀疏的轉變導致效率增加的閾值。