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