フィルターのクリア

Finding Indices of Duplicate Values

141 ビュー (過去 30 日間)
RDG
RDG 2013 年 11 月 19 日
回答済み: RST 2024 年 5 月 14 日
Suppose, I have a variable,
a{1}=[
2 2 1 3
5 2 1 1
5 2 1 4
5 2 1 2
1 1 2 1
2 2 2 1
1 1 3 4
1 1 3 3
4 1 3 5
1 1 4 3
1 1 4 4
1 1 4 1
2 2 4 1
2 2 4 2
4 1 4 2
4 1 4 6
2 2 5 2
2 2 5 6
4 1 5 1
4 1 5 2
4 1 5 6
4 1 5 5]
How can I find the indices of duplicate values for column 3:4?
I am using Matlab R2013a. Thank you in advance.

採用された回答

Simon
Simon 2013 年 11 月 19 日
Hi!
You may use "unique". The second output is the index of all unique values, e.g. in column 3. All other indices are duplicates.
  6 件のコメント
Jeffrey Daniels
Jeffrey Daniels 2018 年 10 月 1 日
This is one solution but it is not complete or 100% accurate. The question asked for unique matches in columns 3 and 4. Also, this method only returns values that are repeated adjacent to each other. If you want to find all matches in all rows, I would refer you to this solution: https://www.mathworks.com/matlabcentral/answers/175086-finding-non-unique-values-in-an-array
Giuseppe Degan Di Dieco
Giuseppe Degan Di Dieco 2021 年 6 月 29 日
Thank you Guys!
So helpful your tips.
Best.

サインインしてコメントする。

その他の回答 (2 件)

B Mohandes
B Mohandes 2016 年 11 月 10 日
by coincidence i found another way to do it, but thanks to those who answered already. the outputs of the command "unique" can be tricky to deal with, hence, here is a straight forward way.
>> find(hist(a,unique(a))>1)
the command (hist) counts the frequency (number of repetitions) of a certain value in a vector. if you use: hist(a), matlab will divide the whole range of values to 10 periods, and count the repetitions of values lying within these ranges. however, if you use: hist(a,b), then the repetitions are counted against the reference (b). so when you count the occurrences of each element in (a) against the unique elements of (a), and you find the results that are >2, then you're finding the elements that occurred more than once.
regards
  4 件のコメント
Yavor Kamer
Yavor Kamer 2019 年 9 月 10 日
i think you can use 1:max(ib) in your second unique
Matt Fetterman
Matt Fetterman 2020 年 3 月 2 日
I think a has to be sorted for this to work properly

サインインしてコメントする。


RST
RST 2024 年 5 月 14 日
If I understand correctly, you want the row indices where the pair a{1)}(3,4) are duplicated.
a{1}=[
2 2 1 3
5 2 1 1
5 2 1 4
5 2 1 2
1 1 2 1
2 2 2 1 % me!
1 1 3 4
1 1 3 3
4 1 3 5
1 1 4 3
1 1 4 4
1 1 4 1
2 2 4 1 % and me!
2 2 4 2
4 1 4 2 % and me!
4 1 4 6
2 2 5 2
2 2 5 6
4 1 5 1
4 1 5 2 % and me!
4 1 5 6 % and me!
4 1 5 5]
a = 1x1 cell array
{22x4 double}
[~,ixu] = unique( a{1}(:,3:4), 'rows'); % gives indices of the first of the unique rows
ixd = setdiff( 1:size(a{1},1), ixu); % (duplicate rows) = (all rows) - (unique rows)
clear ixu
ixd
ixd = 1x5
6 13 15 20 21
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
% show rows that are duplicates in columns 3:4
a{1}(ixd, :)
ans = 5x4
2 2 2 1 2 2 4 1 4 1 4 2 4 1 5 2 4 1 5 6
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by