finding the frequency of a series of numbers in an array
88 次查看(过去 30 天)
显示 更早的评论
given the data set
data=[1,1,1,2,2,3,3,3,4,4,3,3,5,5,5,6,7,8,9,9,9,1,1,1,1,10,10,1,1,1,2,2,2,2,1];
I want to find the number of occurrences (frequency) of each series of numbers in the array. For example, I know there are eleven places that 1 occurs.
k=1
location=find(data==k)
location = 1 2 3 22 23 24 25 28 29 30 35
But I want the frequency (number of series that occur in the data set for a given value in the array. Also, I want to exclude series of data in the frequency count if they fall below a threshold value (arbitrarily a value of 2 in this case). The output for the one value should be freq=3
I want the output to be a 10x2 array with the frequency of each number value 1 through 10 to be sorted in order
seriesfreq=
1 3
2 2
3 1
4 1
5 1
6 0
7 0
8 0
9 1
10 1
Please help!
0 个评论
采纳的回答
Guillaume
2015-6-4
编辑:Guillaume
2015-6-4
A method with no loop:
data=[1,1,1,2,2,3,3,3,4,4,3,3,5,5,5,7,8,9,9,9,1,1,1,1,10,10,1,1,1,2,2,2,2,1];
threshold = 2;
transpos = find(diff(data)); %gives the position of the end of each series of identical number
transvals = data(transpos); %gives the corresponding value of each series
transvals(diff([0 transpos numel(data)+1]) < threshold) = []; %remove values for which the run is shorter than threshold
bins = min(data):max(data)';
[bins; histcounts(transvals, [bins Inf])]' %get the histogram of the runs
更多回答(4 个)
Jan
2015-6-4
[value, len] = RunLength(data);
bin = min(value):max(value);
h = histc(value(len > 2), bin);
result = [bin.', h.']
0 个评论
Azzi Abdelmalek
2015-6-3
编辑:Azzi Abdelmalek
2015-6-3
data=[1,1,1,2,2,3,3,3,4,4,3,3,5,5,5,6,7,8,9,9,9,1,1,1,1,10,10,1,1,1,2,2,2,2,1];
ii=unique(data);
for k=1:numel(ii)
a=data==ii(k);
b=[0 a 0];
out(k)=sum(strfind(b,[1 0])-strfind(b,[0 1])>=2);
end
out
2 个评论
Azzi Abdelmalek
2015-6-4
data=[1,1,1,2,2,3,3,3,4,4,3,3,5,5,5,6,7,8,9,9,9,1,1,1,1,10,10,1,1,1,2,2,2,2,1];
ii=min(data):max(data);
for k=1:numel(ii)
a=data==ii(k);
b=[0 a 0];
out(k)=sum(strfind(b,[1 0])-strfind(b,[0 1])>=2);
end
out
Suvidha Tripathi
2018-10-24
data=[1,1,1,2,2,3,3,3,4,4,3,3,5,5,5,7,8,9,9,9,1,1,1,1,10,10,1,1,1,2,2,2,2,1]
unique_data=unique(data);
disp("series_no "+"frequency")
for i=1:length(unique_data)
[~,indices]=find(data==unique_data(i));
freq(i)=length(indices);
disp(unique_data(i)+" "+freq(i))
end
0 个评论
Manoel Rodrigues Trigueiro
2019-3-30
% Frequency order function %
function f = freq(X)
a = unique(X); len_X = length(a);
for i=1:len_X
f(i) = mode(X);
ind = find(mode(X)==X);
for j=1:length(ind)
X(ind(j)) = NaN;
end
end
end
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!