MATLAB:如何找到重复元素的坐标?
MATLAB: How to find the coordinates of the repeating elements?
我有两个大小相同的列向量 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 中都有对应的元素。我使用以下代码(@VHarisop)删除了 X 中的重复值以及它们在 Y 中的对应值:
% 'stable' argument preserves ordering
[Xfixed, ind] = unique(X, 'stable');
% ind now holds the indices of the unique elements
Yfixed = Y(ind);
我需要找到重复元素的坐标:分别不在Xfixed和Yfixed中的X和Y的元素。感谢任何帮助。
如果 ind
包含 Xfixed
中每个唯一值的 第 个位置,只需创建一个从 1 到 X
是,并使用 ind
从该向量中消除这些条目。其结果将是一个向量,其中包含 Xfixed
中的非唯一条目。因此,尝试做:
val = 1 : numel(X);
val(ind) = [];
Xfinal = X(val);
Yfinal = Y(val);
前两行代码就是我之前说的。 val
将包含那些不包含唯一元素的索引。然后我们将使用 val
索引到 X
和 Y
来获取我们的内容,这些内容存储在 Xfinal
和 Yfinal
.
中
这是一个例子:
X = [1 1 1 2 2 3 3 3 4 4 5 5 6 6 7 7 7 8 8]; %// Example data
Y = [9 8 7 6 5 4 2 1 3 5 6 7 8 9 9 8 8 0 0];
[Xfixed, ind] = unique(X, 'stable'); %// Your code
%// New code
val = 1 : numel(X);
val(ind) = [];
Xfinal = X(val);
Yfinal = Y(val);
显示 val
、Xfinal
和 Yfinal
是什么,我们得到:
>> Xfinal
Xfinal =
1 1 2 3 3 4 5 6 7 7 8
>> Yfinal
Yfinal =
8 7 5 2 1 5 7 9 8 8 0
>> val
val =
2 3 5 7 8 10 12 14 16 17 19
如果我们也检查 ind
,我们得到:
ind =
1
4
6
9
11
13
15
18
ind
包含唯一且第一次遇到的条目。这意味着 val
包含其他不唯一的条目。您将使用 val
索引到 X
并使用 Y
检索那些非唯一值。如果您查看 val
并将其与 X
中的每个对应位置进行比较,您会发现这些对应于非唯一位置,我们 select 这些来自 X
以及Y
.
中对应的位置
最后三行查找完整索引列表的补集和 unique 函数提供的索引。
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');
[Xfixed, ind] = unique(X, 'stable');
Yfixed = Y(ind);
ind_repeat=setdiff(1:1:size(X,1),ind);
Xrepeat=X(ind_repeat);
Yrepeat=Y(ind_repeat);
我有两个大小相同的列向量 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 中都有对应的元素。我使用以下代码(@VHarisop)删除了 X 中的重复值以及它们在 Y 中的对应值:
% 'stable' argument preserves ordering
[Xfixed, ind] = unique(X, 'stable');
% ind now holds the indices of the unique elements
Yfixed = Y(ind);
我需要找到重复元素的坐标:分别不在Xfixed和Yfixed中的X和Y的元素。感谢任何帮助。
如果 ind
包含 Xfixed
中每个唯一值的 第 个位置,只需创建一个从 1 到 X
是,并使用 ind
从该向量中消除这些条目。其结果将是一个向量,其中包含 Xfixed
中的非唯一条目。因此,尝试做:
val = 1 : numel(X);
val(ind) = [];
Xfinal = X(val);
Yfinal = Y(val);
前两行代码就是我之前说的。 val
将包含那些不包含唯一元素的索引。然后我们将使用 val
索引到 X
和 Y
来获取我们的内容,这些内容存储在 Xfinal
和 Yfinal
.
这是一个例子:
X = [1 1 1 2 2 3 3 3 4 4 5 5 6 6 7 7 7 8 8]; %// Example data
Y = [9 8 7 6 5 4 2 1 3 5 6 7 8 9 9 8 8 0 0];
[Xfixed, ind] = unique(X, 'stable'); %// Your code
%// New code
val = 1 : numel(X);
val(ind) = [];
Xfinal = X(val);
Yfinal = Y(val);
显示 val
、Xfinal
和 Yfinal
是什么,我们得到:
>> Xfinal
Xfinal =
1 1 2 3 3 4 5 6 7 7 8
>> Yfinal
Yfinal =
8 7 5 2 1 5 7 9 8 8 0
>> val
val =
2 3 5 7 8 10 12 14 16 17 19
如果我们也检查 ind
,我们得到:
ind =
1
4
6
9
11
13
15
18
ind
包含唯一且第一次遇到的条目。这意味着 val
包含其他不唯一的条目。您将使用 val
索引到 X
并使用 Y
检索那些非唯一值。如果您查看 val
并将其与 X
中的每个对应位置进行比较,您会发现这些对应于非唯一位置,我们 select 这些来自 X
以及Y
.
最后三行查找完整索引列表的补集和 unique 函数提供的索引。
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');
[Xfixed, ind] = unique(X, 'stable');
Yfixed = Y(ind);
ind_repeat=setdiff(1:1:size(X,1),ind);
Xrepeat=X(ind_repeat);
Yrepeat=Y(ind_repeat);