2015-06-27 130 views
1

我有一個3x3x2000的旋轉矩陣陣列,需要轉換爲2000x9的陣列。Matlab:將三維陣列重塑爲二維陣列

我想我必須使用permute()和reshape()的組合,但我沒有得到正確的輸出順序。

這就是我需要:

First row of 3x3 array needs to be columns 1:3 in the output 
Second row of 3x3 array needs to be columns 4:6 in the output 
Third row of 3x3 array needs to be columns 7:9 in the output 

我在下面的代碼試圖數目的所有可能的組合1 2 3:

out1 = permute(input, [2 3 1]); 
out2 = reshape(out1, [2000 9]); 

但我總是錯誤的順序結束。 Matlab新手的任何提示?

+2

舉一個輸入**和**所需輸出的小例子,它將幫助潛在的志願者知道他們是否得到對的。提示:您可能不得不在轉換中包含一些轉置('。')操作,並且不要忘記_Matlab_是'主要列'(例如_linear索引按列而不是lines_工作)。 – Hoki

回答

1

如何簡單for -loop?

for i=1:size(myinput,3) 
    myoutput(i,:)=[myinput(1,:,i) myinput(2,:,i) myinput(3,:,i)]; 
    % or 
    % myoutput(i,:)=reshape(myinput(:,:,i),[],9); 
end 

這不是簡單的使用permutereshape,但它是透明的和調試更加容易。一旦程序中的所有內容都運行完好,您可以考慮在您的代碼中重寫for -loops ...

1

你必須在你的permute

a = reshape(1:9*6, 3, 3, []); 

a是一個3x3x6基質混合時,每個

a(:,:,i) = 9*(i-1) + [1 4 7 
         2 5 8 
         3 6 9]; 

所以

out1 = permute(a, [3,1,2]); 
out2 = reshape(out1, [], 9); 

或者在一行

out3 = reshape(permute(a, [3,1,2]), [], 9); 

所以

out2 = out3 = 

    1  2  3  4  5  6  7  8  9 
    10 11 12 13 14 15 16 17 18 
    19 20 21 22 23 24 25 26 27 
    28 29 30 31 32 33 34 35 36 
    37 38 39 40 41 42 43 44 45 
    46 47 48 49 50 51 52 53 54