Matlab - Как объединить / чередовать 2 матрицы? - PullRequest
10 голосов
/ 22 августа 2011

Как можно объединить 2 матрицы A, B в одну так, чтобы новая матрица C = строка 1 из A, затем строка 1 из B, затем строка 2 из A, строка 2 из B, строка 3 из A, строка 3 из B, и т.д? Желательно без цикла for?

например: A = [1 2 3; 4 5 6], B = [5 5 5; 8 8 8].
AB = [1 2 3; 5 5 5; 4 5 6; 8 8 8].

1 Ответ

12 голосов
/ 22 августа 2011

Все, что вам нужно, это немного оцепенения и изменения. Сначала вы объединяете по измерению 2, затем транспонируете и линеаризуете (AB(:)), так что вы получаете вектор, первые три элемента которого - первая строка A, затем первая строка B, затем вторая строка A и т. д. Все, что осталось в конце, это вызвать команду reshape, чтобы снова поместить все в массив.

nColumns = size(A,2);
AB = [A,B]'; 
AB = reshape(AB(:),nColumns,[])'; 

В качестве альтернативы, вы можете создать AB напрямую с помощью индексации. В этом случае A может иметь на одну строку больше, чем B. Это, вероятно, быстрее, чем указано выше.

[nRowsA,nCols] = size(A);
nRowsB = size(B,1);

AB = zeros(nRowsA+nRowsB,nCols);
AB(1:2:end,:) = A;
AB(2:2:end,:) = B;
...