Объединить две матрицы A и B, выбирая элементы сначала из A, а затем из B, в Matlab - PullRequest
3 голосов
/ 14 февраля 2012

Я работаю над своим проектом с помощью Matlab, и мне нужно объединить две матрицы следующим образом:

A и B - 16 * 50 матриц

Моя новая матрица C должна выглядеть следующим образом:

C =

A(1,1)  A(1,2) ... A(1,50) 

B(1,1)  B(1,2) ... B(1,50)

A(2,1)  A(2,2) ... A(2,50)

B(2,1)  B(2,2) ... B(2,50)

 .       .            .

 .       .            .

 .       .            .

A(16,1) A(16,2) ... A(16,50)

B(16,2) B(16,2) ... B(16,50)

Как я могу это сделать, пожалуйста, помогите. Спасибо.

Ответы [ 2 ]

5 голосов
/ 14 февраля 2012

Сначала обязательно прочитайте ответ @woodchips: важно узнать, как MATLAB хранит массивы в памяти.

В любом случае я бы пошел на:

C = zeros(2,16,50);
C(1,:) = A(:);
C(2,:) = B(:);
C = reshape(C, 32, 50);

или

C = zeros(32,50);
C(1:2:end,:) = A;
C(2:2:end,:) = B;

Так как эти подходы избегают переупорядочения элементов.

4 голосов
/ 14 февраля 2012

Узнайте, как элементы массива находятся в памяти и как такие элементы, как изменение формы, перестановка и т. Д., Работают с этими элементами.

Во-первых, вы можете просто объединить две матрицы друг на друга? [A; B] будет достаточно, конечно.

Что бы произошло, если бы вы затем использовали reshape для результата? Так что-то вроде этого ...

reshape([A;B],[16,2,50])

Далее, что произойдет, если вы примените перестановку?

permute(reshape([A;B],[16,2,50]),[2 1 3])

Мы приближаемся? Что делать, если вы изменили результат? (Да, возможно, вы захотите сделать все это в несколько шагов, чтобы сделать его читабельным. Читаемый код очень важен, когда вам нужно отладить его в следующем месяце или в следующем году. Также важны строки комментариев, которые сообщают, что делает блок кода. )

% interleave the rows of matrices A and B to create C
C = reshape([A;B],[16,2,50])
C = permute(C,[2 1 3]);
C = reshape(C,[32,50]);

Суть в том, чтобы научиться использовать инструменты в Matlab для перемещения ваших элементов в памяти с учетом цели. Прежде чем вы закончите, не забудьте эти комментарии. Легко читаемый код - это легко отлаженный код. Если предложенная мною строка комментария вам не подходит, добавьте больше строк. Комментарии практически бесплатны! На их создание у вас уходит всего несколько секунд и нет времени на выполнение, но они неизмеримо улучшают ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...