Matlab - как слить/чередовать 2 матрицы?

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

ex: 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

Все, что вам нужно, - это немного привязка и перестройка. Сначала вы привязываетесь к размерности 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;