#matlab #matrix
#matlab #матрица
Вопрос:
Смехотворно простой вопрос, но я хотел бы разобраться: работая в MATLAB, я пытаюсь взять матрицу NxN и скопировать ее N раз, чтобы заполнить матрицу NxNxN. Мой код выполняется, но переменная «ThreeD» остается неизменной после завершения цикла. Кроме того, я предполагаю, что цикл — не лучший способ сделать это, хотя я ничего не имею против этого в принципе. Заранее спасибо!
reps = 64;
gradient = (1:reps);
pattern = repmat(gradient,reps,1);
threeD = zeros(reps,reps,reps);
for c = reps
threeD(:,:,c) = pattern;
end
Комментарии:
1. С трансляцией вы также можете использовать
M.*ones(1,1,size(M,1))
, гдеM
находится ваша 2D-матрица.
Ответ №1:
Способ 1: использование циклов
Цикл for, необходимый для перехода от 1
к reps
которому, обозначается 1:reps
символом .
reps = 64;
gradient = (1:reps);
pattern = repmat(gradient,reps,1);
threeD = zeros(reps,reps,reps);
for Layer = 1: reps
threeD(:,:,Layer) = pattern;
end
Метод 2: использование Repmat для репликации по третьему измерению
Второй аргумент в repmat()
массиве [1 1 повторений] указывает, сколько раз нужно реплицировать массив по [row column layer]
[x y z]
измерениям / .
reps = 64;
gradient = (1:reps);
pattern = repmat(gradient,reps,1);
threeD = repmat(pattern,[1 1 reps]);
Использование версии MATLAB: R2019b
Комментарии:
1. Идеальный. Спасибо!
2. @nghess Нет проблем, рад помочь.