2011-12-28 55 views
4

我正在將3d矩陣轉換爲2d矩陣。這是形狀變換:[n x m x o] - > [n * o x m]。將矩陣從3d更改爲2d,保持行

矩陣的元素是行相關的。因此,要求在結果矩陣中具有相同的行。

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 

是否有可能使用重塑一個更有效的方法?

非常感謝!

回答

4

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); 
+0

使用置換而不是ipermute的作品,是不是?我真的不明白3D排列... – rauldg 2011-12-28 15:03:04

+1

偉大的啤酒瓶,在我看來,這應該超過兩個upvotes。 – Wok 2012-10-19 08:36:04