Count unique values in a double

5 views (last 30 days)
Emma Kuttler
Emma Kuttler on 1 Mar 2022
Answered: Peter Perkins on 2 Mar 2022
I have a single column double with a lot of repeated values. I need to find the number of unique elements of that list (don't care about where they are) and also produce a list of all of the unique values.
When I've tried using unique() and diff() i get these errors.
>> count = unique(x(:,1))
Subscripting into a table using one subscript (as in t(i)) or three or more subscripts (as in t(i,j,k)) is not
supported. Always specify a row subscript and a variable subscript, as in t(rows,vars).
>> b = x([diff(x)~=0, false])
Error using horzcat
Dimensions of arrays being concatenated are not consistent.

Answers (3)

Walter Roberson
Walter Roberson on 1 Mar 2022
The first error suggests that you might happen to have a table() object named unique in your workspace.
The second error tells you that x has at least three rows, so diff(x)~=0 has at least two rows; you cannot horzcat() a single false onto multiple rows.
By the way, when using logical indexing, you can omit all trailing false in the dimension. For example,
x = 1:5
x = 1×5
1 2 3 4 5
x([true false true false false]) %complete logical indexing
ans = 1×2
1 3
x([true false true]) %trailing false not needed
ans = 1×2
1 3

Fangjun Jiang
Fangjun Jiang on 1 Mar 2022
count = numel(unique(x(:,1)))

Peter Perkins
Peter Perkins on 2 Mar 2022
In addition to what Walter said, if you want the unique values of one variable in a table, likely this is what you should use:
count = unique(x.SomeVarName)
count = unique(x(:,1))
will return a shorter one-variable table. That's probably not what you want.




Community Treasure Hunt

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

Start Hunting!

Translated by