我一直在尝试对我的早期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