在两个不同但依赖的MATLAB数组/矩阵中进行子集

时间:2014-10-30 18:28:03

标签: arrays matlab matrix subset

我有两个包含笛卡尔坐标的矩阵:

[x,y] = meshgrid(1:100,1:100);
plot(x,y,'o')

我希望以这样的方式对这些矩阵进行子集化,即删除这些坐标的矩形子集。我不确定如何最好地指定子集的取自何处。我们假设矩形的边界框为rect = [30 40 50 60];,格式为[left top right bottom]

我已经尝试分别对每个矩阵进行子集化,但是这样可以删除比我想要的更多的坐标,并且不会给出所得到的矩形孔#39;我正在寻找:

ax = x(x<30 | x>50);
ay = y(y<40 | y>60);
plot(ax,ay,'o')

我相信这是因为矩阵中包含的x和y坐标是相互关联的,我需要将它们视为一组。我试过这样做:

lx = x(:);
ly = y(:);
coords = horzcat(lx,ly);

当我尝试子集时,我无法获得xy坐标:

[cutout.x, cutout.y] = coords((coords(:,1)<30 & coords(:,2)<40) | (coords(:,1)>50 & coords(:,2)>60));
Indexing cannot yield multiple results.

我所做的一切,再一次,并不是我想要的:

cutout = coords((coords(:,1)<30 & coords(:,2)<40) | (coords(:,1)>50 & coords(:,2)>60));

如何对这两个链接的MATLAB数组进行子集化并得到我正在寻找的结果?

编辑:我与setdiff函数有一点距离,但仍然不是。

cutout = [30:50;40:60]';
result = setdiff(coords,cutout,'rows');
plot(result(:,1), result(:,2), 'o')

1 个答案:

答案 0 :(得分:1)

您可以使用蒙版将NaNsx的{​​{1}}内的边框设置为y,并且这些点不会显示在图中 -

[x,y] = meshgrid(1:100,1:100);

mask = x>=30 & x<=50 & y>=40 & y<=60

x(mask) = nan;
y(mask) = nan;

plot(x,y,'o')

输出 -

enter image description here

希望这是你所追求的!