Изменить форму матрицы с 3D на 2D, сохраняя ряды - PullRequest
4 голосов
/ 28 декабря 2011

Я превращаю 3d-матрицу в 2D-матрицу.Это преобразование формы: [nxmxo] -> [n * oxm].

Элементы матриц связаны со строками.Таким образом, требуется, чтобы в результирующей матрице были одинаковые строки.

A = rand(2,2,3);

Делаем так:

C = reshape(A, 2*3, 2);

не сохраняет строки в A.

Итак, я делаю это:

B = zeros(size(A,1)*size(A,3),size(A,2));
first_indice = 1;
for i = 1:size(A,3)
    B(first_indice:size(A,1)*i,:)=A(:,:,i);
    first_indice = first_indice + size(A,1);
end

Есть ли более эффективный способ, возможно, с помощью изменения формы?

Большое спасибо!

1 Ответ

4 голосов
/ 28 декабря 2011

Reshape объединяет матричные элементы, начиная с первого измерения. Таким образом, решение будет заключаться в перестановке размеров до изменения формы. В вашем случае это должно быть следующим:

% A is the input matrix of dimensions (n x m x o).
B = ipermute(A, [1 3 2]);
C = reshape(B, n*o, m);
...