2013-03-26 44 views
0

我有數據示於下面:提取對角線數據的和重組的數量

for a=1:2 
    for b=1:3 
     m{a,b}=zeros(3,3) 
    end 
end 

m{1,1}=[6 1 1;1 7 1;1 1 6]; 
m{1,2}=[3 2 2;2 5 2;2 2 6]; 
m{1,3}=[5 3 3;3 9 3;3 3 7]; 

m{2,1}=[2 4 4;4 5 4;4 4 8]; 
m{2,2}=[2 1 1;1 6 1;1 1 5]; 
m{2,3}=[6 2 2;2 7 2;2 2 8]; 

我想利用對角線每組僅數據的和重組這些numbers.For例如,

%RESULT 

row_1_1=[6;3;5] %which 6 from m{1,1}(1,1), 3 from m{1,2}(1,1) and 5 from m{1,3}(1,1) 

row_1_2=[7;5;9] %which 7 from m{1,1}(2,2), 5 from m{1,2}(2,2) and 9 from m{1,3}(2,2) 

row_1_3=[6;6;7] %which 6 from m{1,1}(3,3), 6 from m{1,2}(3,3) and 7 from m{1,3}(3,3) 

row_2_1=[2;2;6] %which 2 from m{2,1}(1,1), 2 from m{2,2}(1,1) and 6 from m{2,3}(1,1) 

等等。

任何想法怎麼辦得到這些結果??謝謝〜

+0

您是否注意到第1列,:,1等於diag(m {1,1})。如果你重塑你的問題,也許你可以更容易。 – bdecaf 2013-03-26 08:42:17

+0

爲什麼要將它們存儲爲'row_1_1 ... row_2_3'而不是'rows {1,1} ... rows {2,3}'? – erikced 2013-03-26 17:45:08

回答

0

你可以簡單地做:

row_result = zeros(a,b,3); 
for i=1:a 
    for j=1:b 
     for k = 1:3 
      row_result(i,k,j) = m{i,k}(j,j); 
     end 
    end 
end 

對於所提供的樣本數據,如下這將產生的結果:

>> row_result(1,:,1) 

ans = 

    6  3  5 

>> row_result(1,:,2) 

ans = 

    7  5  9 

>> row_result(1,:,3) 

ans = 

    6  6  7 

>> row_result(2,:,1) 

ans = 

    2  2  6 
+0

可以保存結果,如row_1_3 = [6; 6; 7] ?? – 2013-03-26 07:31:21

+0

您當然可以:簡單的方法是取掉兩個外部循環並對每個這樣的變量進行硬編碼;另一種方法(儘管我自己沒有嘗試過)是創建動態變量名稱,如[here](http://www.mathworks.in/matlabcentral/newsreader/view_thread/156268)。然而,使用動態變量名稱並不被認爲是很好的編程實踐。 – 2013-03-26 07:38:20

0

我認爲你被一個醜陋的for循環來構建你的新矩陣。

是否有某些原因使用單元數組而不是其他數據類型,比如更高維矩陣或結構數組?單元格數組的意義在於每個單元格的內容完全相互獨立,這意味着您不能使用':'來訪問單元格內容的內部字段。

+0

我在數據中使用單元陣列,因爲有高維矩陣。 – 2013-03-26 07:30:56

+0

在這種情況下,只需使用更高維的矩陣:m =零(2,3,3,3); m(1,1,:,)= [611; 1 7 1; 1 6]; etc ... – user670416 2013-03-26 07:37:12

+0

然後,你會有row_1_1 = m(1,:,1,1) – user670416 2013-03-26 07:39:44