Определение количества вхождений каждого уникального элемента в вектор
Как определить относительную частоту значения в векторе MATLAB?
vector = [ 2 2 2 2 1 1 1 2 2 1 1 1 2 2 2 2 1 2 ];
Какая функция вернет количество вхождений каждого уникального элемента?
Ответы
Ответ 1
Вы можете использовать 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]
, что является относительной частотой уникальных элементов. Это будет работать как для целых чисел, так и для плавающих точек.
Ответ 2
Для наиболее общем случае, когда у вас есть вектор значений с плавающей точкой, вы можете использовать функции UNIQUE и ACCUMARRAY:
[uniqueValues,~,uniqueIndex] = unique(vector);
frequency = accumarray(uniqueIndex(:),1)./numel(vector);
Ответ 3
Вы можете использовать функцию tabulate. См. Этот пример с вашим вектором.
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)
Ответ 4
Отсылаем этот ответ:
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]