对稀疏矩阵的单元阵列求和

时间:2017-04-02 14:21:13

标签: matlab optimization cell sparse-matrix

我有100个大小为 N-by-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秒。有没有办法优化这段代码?

1 个答案:

答案 0 :(得分: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