Most populated range of floating point numbers in array
6 views (last 30 days)
histc can be used on a floating point array to find the bin with the largest number of elements. However these bins are fixed, and for a fixed width of bin, might not be optimal.
a=[0 0.01 0.4 0.45 0.55 0.56 0.60]
histc(a,[0 0.5 1])
4 3 0
So the most frequent bin is [0, 0.5]. However, I am interested in a function that finds the range of at most 0.5 wide, with the most elements, so in this case [0.4, 0.6] which contains 5 elements. Does anybody know an elegant way of doing this?
Roger Stafford on 8 Sep 2014
Perhaps you won't consider this for-loop solution elegant, but it should be computationally efficient. I will assume that your array 'a' is already in ascending order, as in your example. If not, you should sort it first before using the following code:
d = 0.5; % <-- or whatever you choose
n = length(a);
i1 = 1;
for i2 = 1:n
if a(i2)-a(i1) <= d
m = i2;
i1 = i1+1;
The interval [a(m-n+i1),a(m)] is of width less than or equal to d and contains the maximum number of points among such intervals. If there are other such intervals with the same number of points, this is the first one encountered.