2014-02-03 5 views
0

Мне нужно рассчитать частоту каждого значения в другом векторе в MATLAB. я могу использовать что-то вродечастота каждого векторного значения в другом векторе matlab

for i=1:length(pdata) 
    gt(i)=length(find(pf_test(:,1)==pdata(i,1))); 
end 

Но я предпочитаю не использовать петлю, потому что мой набор данных достаточно велик. Есть ли что-то вроде histc (которое используется для поиска частоты значений в одном векторе), чтобы найти частоту одного векторного значения в другом векторе?

ответ

2

Если значения только целые числа, вы можете сделать следующее:

range = min(pf_test):max(pf_test); 
count = histc(pf_test,range); 

gt = count(ismember(range,a)); 
gt(~ismember(unique(a),b)) = 0; 

Если вы не можете гарантировать, что значения являются целыми числами, это немного сложнее. Одним из возможных способов было бы следующее:

%restrict yourself to values that appear in the second vector 
filter = ismember(pf_test,pdata); 

% sort your first vector (ignore this if it is already sorted) 
spf_test = sort(pf_test); 

% Find the first and last occurrence of each element 
[~,last] = unique(spf_test(filter)); 
[~,first] = unique(spf_test(filter),'first'); 

% Initialise gt 
gt = zeros(length(pf_test)); 

% Fill gt 
gt(filter) = (last-first)+1; 

EDIT: Обратите внимание, что я, возможно, получили векторы неправильный путь вокруг - если это не работает, как ожидалось, переключатель pf_test и pdata. Мне не сразу стало ясно, что именно.

0

Вы упомянули histc. Почему вы не используете его (в его версии с двумя входными параметрами)?

>> pdata = [1 1 3 2 3 1 4 4 5]; 
>> pf_test = 1:6; 
>> histc(pdata,pf_test) 
ans = 
    3  1  2  2  1  0 
Смежные вопросы