我一直在嘗試對我的早期question進行Ghaul's answer關於導入上三角矩陣的一般導入。在MATLAB中對上三角矩陣進行一般導入
初始化數據:
1.0 3.32 -7.23
1.00 0.60
1.00
A = importdata('A.txt')
A =
1.0000 3.3200 -7.2300
1.0000 0.6000 NaN
1.0000 NaN NaN
所以,你將不得不在最後兩行轉移,像這樣的:他們的對稱同行
A(2,:) = circshift(A(2,:),[0 1])
A(3,:) = circshift(A(3,:),[0 2])
A =
1.0000 3.3200 -7.2300
NaN 1.0000 0.6000
NaN NaN 1.0000
然後更換的NaN:
A(isnan(A)) = A(isnan(A)')
A =
1.0000 3.3200 -7.2300
3.3200 1.0000 0.6000
-7.2300 0.6000 1.0000
我有這個,所以我們得到的完整矩陣的任何尺寸:
A = importdata('A.txt')
for i = (1:size(A)-1)
A(i+1,:) = circshift(A(i+1,:),[0 i]);
end
A(isnan(A)) = A(isnan(A)');
是這種方法最好?必須有更好的東西。我記得有人告訴我儘量不要在MATLAB中使用for
循環。
UPDATE
所以這就是結果。沒有任何方法可以讓它在沒有循環的情況下變得更快?
A = importdata('A.txt')
for i = (1:size(A)-1)
A(i+1,:) = circshift(A(i+1,:),[0 i])
end
A(isnan(A)) = 0;
A = A + triu(A, 1)';
看到我更新的答案,我認爲這應該工作。 – Ghaul 2011-03-08 15:55:45