1

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

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

每列 (x, y, z, se, index, 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

但它没有用。

我怎样才能得到这些子矩阵?

4

1 回答 1

4

我同意@EitanT 的观点,即您应该使用元胞数组,而不是制作大量不同名称的数组。然后,您可以将这些子矩阵作为rexy{i,j}.

要构造此元胞数组,您可以使用accumarray如下方式:

rexy = accumarray(re2(:,6:7),(1:size(re2,1))',[],@(x){re2(x,:)})
于 2012-11-05T16:39:21.220 回答