2017-04-02 8 views
1

크기가 인 N-by-N의 희소 행렬이 있습니다. 여기에서 N=65536입니다.희소 행렬의 셀 배열을 합한 것

대각선에 가까운 약 5.5M의 0이 아닌 요소 (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