爲尷尬的標題道歉,這裏是一個更具體的問題描述。我有一個大的(例如10^6×10^6)稀疏對稱矩陣,它定義了節點之間的鍵。MATLAB - 使用其他(稀疏)矩陣中的信息填充矩陣的高效方法?
例如矩陣A = [0 1 0 0 0; 1 0 0 2 3; 0 0 0 4 0; 0 2 4 0 5; 0 3 0 5 0]
將描述一個5節點系統,使得節點1和2被鍵數A(1,2) = 1
,節點3和4通過鍵數A(3,4) = 4
連接等
欲形成兩個新的矩陣連接。第一個B將列出連接到每個節點的節點(即,如果需要,B的每一行i具有由find(A(i,:))
給出的元素並且在末尾用零填充),並且第二個C將列出連接到該節點的鍵(即C的每一行i有由nonzeros(A(i,:))
給出的元素,如果需要再次填充)。
例如對於上面的矩陣A,我希望以形成B = [2 0 0; 1 4 5; 4 0 0; 2 3 5; 2 4 0]
和C = [1 0 0; 1 2 3; 4 0 0; 2 4 5; 3 5 0]
當前的代碼是:
B=zeros(length(A), max(sum(spones(A))))
C=zeros(length(A), max(sum(spones(A))))
for i=1:length(A)
B(i,1:length(find(A(i,:)))) = find(A(i,:));
C(i,1:length(nonzeros(A(i,:)))) = nonzeros(A(i,:));
end
其工作原理,但對於大的長度(A)慢。我嘗試了其他的配方,但它們都包含循環,並沒有太大的改進。
如何在不循環行的情況下執行此操作?
sum(spones(A))之前在代碼中用於其他目的,所以重用它是有意義的。感謝您的緩存技巧。 – user1071878