MATLAB:如何从两个对应的列向量中删除重复元素?

MATLAB: How to remove repeating elements from two corresponding column vectors?

我有两个大小相同的列向量 X 和 Y,它们是通过以下 Matlab 代码导出的:

mask = im2bw(rgb2gray(imread('http://i.stack.imgur.com/ES8w1.jpg')));
separation = bwulterode(mask,'euclidean',[0 0 0; 1 1 1; 0 0 0]).*mask; 
[X, Y] = find(separation);
imshow(mask); hold on; plot(Y, X, '.r');

X 中的每个元素在 Y 中都有对应的元素。我需要删除 X 中的重复值及其在 Y 中的对应值,而不重新排列元素的顺序。我正在使用这段代码,但它不会删除重复的元素。问题是什么?

A=[X,Y];
[UniXY,Index]=unique(A,'rows','first');
DupIndex=setdiff(1:size(A,1),Index);
A(DupIndex,:)=[];
X=A(:,1);
Y=A(:,2);
figure; imshow(mask); hold on; plot(Y, X, '.r');

感谢任何帮助。

您可以尝试在 X 上应用 unique'stable' 参数,并使用提取的索引来提取 Y 的相应值。

% 'stable' argument preserves ordering
[Xfixed, ind] = unique(X, 'stable');
% ind now holds the indices of the unique elements
YFixed = Y(ind);

在您的代码中,调用 unique(A, 'rows', 'first') 不会保留元素的顺序。如果对应的 Y 值不同,它也不会删除 X 的重复值。但是,如果2个相同的X值总是对应2个相同的Y值,那么你所要求的可以简单地通过

来完成
A = unique([X Y], 'rows', 'stable');