Counting the number of the unique value in each row of a matrix without using for loop

6 ビュー (過去 30 日間)
M = randi(21,[1000000,9]);
counter = zeros(size(A,1),1);
for j = 1 : size(A,1)
a = unique(Mat(j,:));
counter(j) = numel(a);
end
Hi
I have big size matrix (M in the above code) and I want to count the number of the unique value in each row.
I do not need the values and only the number of unique value is important to me.
The above for loop is a part of my program that needs to be repeated more and more times.
Because of the size of M, it is very time consuming and i dont want to use the above for loop.
Is there a faster alternative?
Thanks
  2 件のコメント
Iuliu Ardelean
Iuliu Ardelean 2021 年 1 月 30 日
編集済み: Iuliu Ardelean 2021 年 1 月 30 日
Your solution takes 10.6 seconds for me. One of the solutions in link above took 0.44 seconds.
Stephen23
Stephen23 2021 年 1 月 30 日
The reason why I gave up on Stack Exchange was because of too much incorrect information or very poor understanding of how to use MATLAB effectively. This thread is a good example, when the most popular answer starts with the remarkably narrow-minded "You need to use unique function on each row...".

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

採用された回答

Stephen23
Stephen23 2021 年 1 月 30 日
M = randi(9,5,7)
M = 5×7
5 4 8 4 9 6 9 3 2 5 9 8 1 8 4 4 8 7 3 3 1 6 7 4 6 6 3 1 6 3 4 2 5 9 7
N = 1+sum(diff(sort(M,2),1,2)~=0,2)
N = 5×1
5 6 5 5 7
  2 件のコメント
reza aghaee
reza aghaee 2021 年 1 月 30 日
Very cleverly
Thanke you so much
Stephen23
Stephen23 2021 年 1 月 31 日
@reza aghaee: please remember to accept my answer if it helped you!

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by