How to easily detect all the equal rows of an array with saving the indices of the elements?

1 回表示 (過去 30 日間)
I have a matrix as shown here
A=[ -1 0 0;
-1 0 0;
-1 0 0;
-1 0 0;
1 0 0;
1 0 0;
] I want to detect all the equal rows in the matrix and build another matrix with the indices of the equal rows. For exemple here row1=rows2=row3=row4 and row5=row6... I want to have a matrix like this [1 2;1 3;1 4; 5 6]. I find a solution but it uses a lot of for loops so it's not fast enough when I apply it to a large matrix. Is there any easiest solution for this. Thank you.

回答 (1 件)

Ahmet Cecen
Ahmet Cecen 2016 年 5 月 19 日
This does all of that:
[C,ia,ic] = unique(A,'rows')
  2 件のコメント
Sleh Eddine Brika
Sleh Eddine Brika 2016 年 5 月 19 日
Thank you Ahmet, I had already tried this function, but its outputs requires additional treatments to get the result that I want. For my exemple, we get ia =[1;5] ic = [1 ;1;1;1;2;2 ] so we need to count for each element of ic how many times it's repeated and then create another matrix that take the first element of ia in column1 and according to the number of repetition in ic (let's say n) affect index for ia(1)+1 to n for the column2. It's a solution but I am working with matrices with more then 2000 rows so it's not fast enough.
Ahmet Cecen
Ahmet Cecen 2016 年 5 月 20 日
histogram(ic,length(ia));
Will give you those counts.

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

カテゴリ

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

Community Treasure Hunt

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

Start Hunting!

Translated by