我有两个包含笛卡尔坐标的矩阵:
[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);
当我尝试子集时,我无法获得x
和y
坐标:
[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')
答案 0 :(得分:1)
您可以使用蒙版将NaNs
和x
的{{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')
输出 -
希望这是你所追求的!