Я пытался сделать общий импорт ответа Гауля на мой ранее вопрос об импорте верхней треугольной матрицы.
Исходные данные:
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)');
Является ли этот подход лучшим? Там должно быть что-то лучше. Я помню, кто-то сказал мне, чтобы я старался не использовать циклы for
в MATLAB.
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)';