Removing duplicate rows (not "unique")
古いコメントを表示
I have a matrix with many (1e5+) rows and I want to remove both copies of all duplicate rows. Is there a fast way to do this? (This function needs to be run many times.)
4 件のコメント
Azzi Abdelmalek
2016 年 5 月 4 日
Do you mean faster way then using unique function?
Michael Siebold
2016 年 5 月 4 日
jgg
2016 年 5 月 4 日
You can use the other calling methods to get replicate counts.
a = [1 2; 1 2; 2 3; 2 4; 2 5; 4 2; 4 2; 1 3; 1 3; 4 5];
[C,ia,ic] = unique(a,'rows');
[count key] = hist(ic,unique(ic));
Then you can just select the keys with non-unit counts and drop them.
Michael Siebold
2016 年 5 月 4 日
採用された回答
その他の回答 (2 件)
Azzi Abdelmalek
2016 年 5 月 4 日
編集済み: Azzi Abdelmalek
2016 年 5 月 4 日
A=randi(5,10^5,3);
tic
A=unique(A,'rows');
toc
The result
Elapsed time is 0.171778 seconds.
3 件のコメント
Michael Siebold
2016 年 5 月 4 日
Azzi Abdelmalek
2016 年 5 月 4 日
編集済み: Azzi Abdelmalek
2016 年 5 月 4 日
You said that unique function will leave a copy of duplicate rows. With this example, I show you that there is no duplicates rows stored! And also it doesn't take much time
Mitsu
2021 年 8 月 3 日
I reckon your answer does not address OP's question because running the following:
A=[1 1 1;1 1 1;1 1 0];
tic
A=unique(A,'rows');
toc
Will yield:
A = 1 1 0
1 1 1
Therefore, A still contains one instance of each row that was duplicate. I believe Michael wanted all instances of each row that appears multiple times be removed.
GeeTwo
2022 年 8 月 16 日
0 投票
%Here's a much cleaner way to do it with 2019a or later!
[B,BG]=groupcounts(A);
A_reduced=BG(B==1); % or just A if you want the results in the same variable.
カテゴリ
ヘルプ センター および File Exchange で MATLAB についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!