另一个向量matlab中每个向量值的频率

时间:2014-02-03 00:20:14

标签: matlab frequency

我需要在MATLAB中计算另一个向量中每个值的频率。 我可以使用像

这样的东西
for i=1:length(pdata)
   gt(i)=length(find(pf_test(:,1)==pdata(i,1)));
end  

但我不喜欢使用循环,因为我的数据集非常大。是否有histc(用于查找一个向量中的值的频率)以查找另一个向量中一个向量值的频率?

2 个答案:

答案 0 :(得分: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;

编辑:请注意,我可能错误地使用了向量 - 如果这不能按预期工作,请切换pf_testpdata。我没有立即清楚哪个是哪个。

答案 1 :(得分: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