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 w
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);
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]
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.
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)