MATLAB: перестановка и преобразование массива N x 4 в массив 2 x 2 x N - PullRequest
0 голосов
/ 29 августа 2018

У меня есть вопрос, который, кажется, должен иметь простой ответ, которого можно избежать для циклов.

Предположим, у меня есть массив N x 4, определенный в MATLAB:

A = [1 2 3 4; 1 2 3 4; 1 2 3 4; 1 2 3 4; 1 2 3 4; 1 2 3 4];

В этом примере N = 6, но это произвольно. Я хочу перестроить A в новый массив, B , который равен 2 x 2 x N массив формы:

B(:,:,1) = [1 2; 3 4];
B(:,:,2) = [1 2; 3 4];

...

B(:,:,N) = [1 2; 3 4];

Это кажется простой проблемой, и я пробовал разные вещи, такие как:

B = reshape(A',2,2,N);

Однако это приводит к

B(:,:,1) = [1 3; 2 4];
B(:,:,2) = [1 3; 2 4];

...

B(:,:,N) = [1 3; 2 4];

Я чувствую, что должен быть простой способ сделать это в одной строке, используя некоторую комбинацию "перестройки", "перестановки" и / или "транспонирования", которую я пропускаю. Любые предложения приветствуются.

1 Ответ

0 голосов
/ 29 августа 2018

Вам не хватает только финала permute. Это необходимо, потому что Matlab является главным по столбцу, поэтому он заполняет новый массив, а затем по:

B = permute(reshape(A.', 2,2,N), [2 1 3]);
...