Определение количества вхождений каждого уникального элемента в векторе - PullRequest
15 голосов
/ 22 марта 2011

Как определить относительную частоту значения в векторе MATLAB?

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

Какая функция будет возвращать число вхождений каждого уникального элемента?

Ответы [ 4 ]

32 голосов
/ 22 марта 2011

Вы можете использовать unique в сочетании с histc, чтобы получить относительную частоту.

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

Это дает уникальные элементы как unqA=[1,2,3,4]. Чтобы получить количество вхождений,

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

Это дает countElA=[3,3,1,1] и relFreq=[0.3750, 0.3750, 0.1250, 0.1250], что является относительной частотой уникальных элементов. Это будет работать как для целых чисел, так и для чисел с плавающей запятой.

10 голосов
/ 22 марта 2011

Для наиболее общего случая, когда у вас есть вектор значений с плавающей запятой, вы можете использовать функции UNIQUE и ACCUMARRAY :

[uniqueValues,~,uniqueIndex] = unique(vector);
frequency = accumarray(uniqueIndex(:),1)./numel(vector);
5 голосов
/ 30 октября 2014

Вы можете использовать функцию табулирования. Посмотрите этот пример с вашим вектором.

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%

Если вам это нужно в процентном порядке, выполните:

t = tabulate(vector);
t = sortrows(t, 3)
0 голосов
/ 22 мая 2015

Ссылаясь на этот ответ:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...