2012-11-05 174 views
1

創建子矩陣的 「聰明」 的方式我有一個2900×7大小矩陣尋找在Matlab

re2 = [x y z se index xc yc]; 

每一列(X,Y,Z,SE,索引,XC,YC)包含數字,所有2900 x 1相同的大小。

我想通過查找第6列第7列中的特定元素,從這一個子矩陣。像這樣:

rexy_1_1 = re2(xc==1 & yc==1,:); 
rexy_1_2 = re2(xc==1 & yc==2,:); 
rexy_1_3 = re2(xc==1 & yc==3,:); 
rexy_1_4 = re2(xc==1 & yc==4,:); 
rexy_1_5 = re2(xc==1 & yc==5,:); 
.... 
rexy_20_17 = re2(xc==20 & yc==17,:); 

但是這意味着我需要編寫340行來生成340個子表。有沒有什麼聰明的方法來做到這一點?我試圖使用兩個for循環:

for i=1:20 
    for j=1:17 
     rexy_i_j = re2(xc==i & yc==j,:); 
    end 
end 

但它沒有奏效。

如何獲得這些子矩陣?

+3

哎喲!你不能每次都生成一個新的變量'rexy_i_j'(簡單地通過賦值_i.e_'rexy_1_1,''rexy_1_2''),這只是超過了變量的舊值'rexy_i_j'。我建議使用單元格數組:'rexy {i,j}'。另外,你是否有實際變量名爲'xc'和'yc'?我認爲你不是正確地提取子矩陣... –

+0

謝謝,xc和yc是2700 x 1列,包含數字xc包含nunmbers範圍從1到20,yc包含1到17 – exsonic01

回答

4

我同意@EitanT你應該使用單元格數組而不是製作大量不同名稱的數組。然後您可以訪問這些子矩陣rexy{i,j}

爲了構建這個單元陣列,可以使用accumarray如下:

rexy = accumarray(re2(:,6:7),(1:size(re2,1))',[],@(x){re2(x,:)}) 
+0

這是狡猾的 - 我還沒有看到準確的使用像這樣以前如果你不需要在創建後保留xc和yc單元格陣列,你可以改變最後一個參數爲re2(x,1:5) – nicktruesdale

+0

非常感謝〜!我認爲這真的是個不錯的主意 – exsonic01

+0

@ user1798797:不客氣,請考慮接受我的回答,如果它是有幫助 – Jonas