2016-09-11 2 views
0

У меня есть 2D Матрица A как:Matlab преобразование 2D матрицу в 3D матрице

A = [ 1 2 3 4 5 6; 
    7 8 9 10 11 12; 
    1 2 3 4 5 6; 
    7 8 9 10 11 12;] 

Я хочу, чтобы преобразовать эту 2D Matrix в 3D Matrix B с размером 2X3X4, как:

B(:,:,1) = [1 2 3; 7 8 9]; 
B(:,:,2) = [1 2 3; 7 8 9]; 
B(:,:,3) = [4 5 6; 10 11 12]; 
B(:,:,4) = [4 5 6; 10 11 12]; 

теперь я сначала преобразую эту 2D-матрицу A в тип ячейки C с mat2cell, а затем воспользуюсь cat, чтобы преобразовать ее в 3D-матрицу B, но это слишком сложно, так как я не нужна эта ячейка C.

Может ли кто-нибудь дать мне какой-либо совет, как я могу преобразовать A в B прямо и элегантно?

Спасибо!

+0

Является 'A' всегда 4х6? –

+0

@ RafaelMonteiro нет, это всего лишь пример, только каждая страница B имеет одинаковый размер. –

ответ

2

Вы могли бы сделать что-то вроде этого -

[m,n] = size(A); 
nr = 2; % Number of rows in o/p 
nc = 3; % Number of cols in o/p 
out = reshape(permute(reshape(A,nr,m/nr,nc,[]),[1,3,2,4]),nr,nc,[]); 
+0

отлично !!! Вы создали матрицу 4D и сохранили много времени. Но в вашем коде есть небольшая ошибка. Я думаю, что это должно быть: –

+0

@JayWang Это должно быть? – Divakar

+0

извините, ctrl + c не удалось. должно быть выведено = reshape (перестановка (reshape (A, nr, m/nr, nc, []), [1,3,2,4]), nr, nc, []) –

Смежные вопросы