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

时间:2015-01-10 01:36:05

标签: arrays matlab duplicates

我有两个相同大小的列向量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');

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以尝试将unique'stable'参数应用于X,并使用提取的索引来提取相应的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');