2017-04-02 53 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