matlab - как объединить / переплетать 2 матрицы?

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

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 ответов


все, что вам нужно-это немного соединение и переформирование. Во-первых, вы catenate по размерности 2, то вы транспонировать, и линеаризовать (AB(:)), чтобы получить вектор, первые три элемента первой строки, потом первую строку B, затем второй ряд и т. д. Все, что осталось в конце, это вызов 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;