寻找在matlab中创建子矩阵的“聪明”方法

时间:2012-11-05 16:09:53

标签: matlab for-loop matrix submatrix

我有一个2900 x 7大小的矩阵

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

每列(x,y,z,se,index,xc,yc)包含数字,所有2900 x 1相同的大小。

我试图通过在第6和第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

但它没有用。

我如何获得这些子矩阵?

1 个答案:

答案 0 :(得分:4)

我同意@EitanT你应该使用单元格数组,而不是制作大量不同命名的数组。然后,您就可以rexy{i,j}访问这些子矩阵。

要构建此单元格数组,可以使用accumarray,如下所示:

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