MATLAB:是否存在一种智能的方法来删除存储在某个数组中的相邻(x,y)点



有吗?我特别想到了一些矩阵数组,其中的行对应于x和y坐标,例如

4 3
4 5
5 4
3 4
4 4

使得(4,3(和(4,5(等是(x,y(点。问题是:如果列表中的一个点被列表中的其他点相邻包围,例如

(~,~) (4,5) (~,~)
(3,4) (4,4) (5,4)
(~,~) (4,3) (~,~)

就像上面的列表一样,那么我想以某种有效的方式删除它。很容易从视觉上看出这是否在某种程度上得到了满足,但我如何在代码中做到这一点呢?我只是在寻找一些建议,所以如果有人以前遇到过这个问题或有一些意见,我会很高兴阅读它!

致问候,

我不确定你是否可以避免在这里循环(不确定这是否就是你所说的高效…(。至少我没有想出一个没有循环的解决方案,但这应该可以。

vec = [4 3; 4 5; 5 4; 3 4; 4 4; 6 7; 6 8; 6 6; 5 7; 7 7];
for i = 1:length(vec)
point = vec(i,:);
mat = vec-point;
% Calculate diagonal values of the matrix product
% Note that sum(mat.*mat,2) might be a bit faster. You can try yourself.
tmp = diag(mat*mat');
if (length(find(tmp == 1)) == 4)
% If we find 4 values of 1 in tmp, the point is surrounded
% E.g., remove the value here if you wish
point
end
end

edit:另外,请注意,如果向量中有重复的点,这将无法正常工作。

最新更新