Matlab 稀疏矩阵单元阵列上的和

Matlab 稀疏矩阵单元阵列上的和,matlab,optimization,cell,sparse-matrix,Matlab,Optimization,Cell,Sparse Matrix,我有100个大小为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 上述循环代码的耗时约25秒。有没有办法优化这段代码?这不使用循环,也避免了将矩阵转换为完整的: [ii, jj, vv] = find(vertcat(S{:})); % concatenat

我有100个大小为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

上述循环代码的
耗时约25秒。有没有办法优化这段代码?

这不使用循环,也避免了将矩阵转换为完整的:

[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

这个代码看起来不错。但在我的电脑里,第一行花了200秒,最后一行花了450秒,然后因为内存不足而停止(