0
我正在處理一個相當大的稀疏矩陣,它的大小約爲150,000 * 150,000。我需要以下的規則如下面的代碼來訪問到它的行,提取非零元素並更換這些值:如何在Matlab中處理稀疏矩陣行中的非零元素?
tic
H = [];
for i = 1: size(A,2)
[a,b,c] = find(A(i,:)); % extract the rows
add = diff([0 c(2:end) 0]); % the replacing rule
aa = i*ones(1,size(a,2)); % return back the old position of rows
G0 = [aa' b' add']; % put it back the old position with replaced values
H = [H; G0];
end
H1 = H(:,1);
H2 = H(:,2);
H3 = H(:,3);
ADD = sparse(H1,H2,H3,nm,nm,nzmax);
toc
我發現find
函數實際上耗時(0.1S /行)在這個代碼和我的稀疏矩陣的當前大小,這項工作需要我大約33個小時。我相信有一些出路,但我是如此新生的編碼和處理稀疏矩陣真的很可怕。
你願意給我一些想法嗎?
它就像一個魅力,從幾個小時到秒!不知何故,我有一個印象,使用細胞是可怕的,所以我總是避免它。但在這種情況下真的很棒!真的很開心!非常感謝 – chappi