2017-04-02 71 views
1

我有100個稀疏矩陣的大小爲N-N-N,其中N=65536稀疏矩陣的單元陣列的總和

它們有大約5.5M非零元素(N^2的0.13%)靠近對角線。

它們存儲在單元陣列中,S{1}, ... , S{100},我想計算總和S{1}+...+S{100}

Sum=sparse(N,N); 
for i=1:100 
    Sum=Sum+S{i}; 
end 

以上for循環代碼耗時約25秒。有什麼辦法來優化這個代碼?

回答

2

這不使用循環,也避免了轉換矩陣充分:

[ii, jj, vv] = find(vertcat(S{:})); % concatenate matrices vertically. 
    % Get nonzero values (vv) with their row (ii) and column (jj) indices 
ii = mod(ii-1, N) + 1; % convert ii to original row indices 
Sum = sparse(ii, jj, vv); % this automatically adds values at the same ii, jj 
+0

該代碼看起來不錯。但在我的電腦中,第一行花了200秒,最後一行耗時450秒,然後因爲內存不足而停下來。 :( – Gobi