Matlab 稀疏矩阵单元阵列上的和
我有100个大小为N×N的稀疏矩阵,其中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
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秒,然后因为内存不足而停止(