копирование матрицы NxN на страницу матрицы NxNxN

#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 Нет проблем, рад помочь.