Determining the number of occurrences of each unique element in a vector

How can I determine the relative frequency of a value in a MATLAB vector?

vector = [ 2 2 2 2 1 1 1 2 2 1 1 1 2 2 2 2 1 2 ];

What function will return the number of occurrences of each unique element?

Answers


You can use unique in combination with histc to get the relative frequency.

A=[1,2,3,1,2,4,2,1]; %#an example vector
unqA=unique(A);

This gives the unique elements as unqA=[1,2,3,4]. To get the number of occurances,

countElA=histc(A,unqA); %# get the count of elements
relFreq=countElA/numel(A);

This gives countElA=[3,3,1,1] and relFreq=[0.3750, 0.3750, 0.1250, 0.1250], which is the relative frequency of the unique elements. This will work for both integers and floating points.


For the most general case where you have a vector of floating point values, you can use the functions UNIQUE and ACCUMARRAY:

[uniqueValues,~,uniqueIndex] = unique(vector);
frequency = accumarray(uniqueIndex(:),1)./numel(vector);

You can use the function tabulate. See this example with your vector.

vector = [ 2 2 2 2 1 1 1 2 2 1 1 1 2 2 2 2 1 2 ];
tabulate(vector);
  Value    Count   Percent
      1        7     38.89%
      2       11     61.11%

If you need it in percent order, do:

t = tabulate(vector);
t = sortrows(t, 3)

Referring from this answer:

unqV = unique(vector);
y = zeros(size(unqV));
for i = 1:length(unqV)
    y(i) = sum(unqV(i)==vector);
end

unqV = [1 2] y = [7 11]


Need Your Help

Redirecting Devise After Sign Out

ruby-on-rails devise

What's the best practice for redirecting the user, using Devise, back to the page she is currently on after she logs out?

how to use winston to setup log in a sub directory instead of root directory?

node.js path winston

I want to setup logs for my nodejs project inside a directory named logs