MATLAB: Find repeated close values in array

arrayMATLABrepeated valuesrepetition

hello,
I have an array like
{86558,29952,29809,29804,29750,29749,29556,29382,29379,28474,15093,14974,14234,14136}
and my threshold is 3000 for checking their closeness to each other. I want to categorize them for example ~86k appears 1, ~29k appears 9, ~14k appears 3 times. I need this result like avg(~29k numbers) and their repetition time. How I can do this? I couldn't figure out. thanks.

Best Answer

Assume your data are sorted as shown; if not sort first.
thsh=3000; % threshold for group difference screening
nGrps=sum(abs(diff(data))>thrsh)+1; % number of groups with that difference or more
C=clusterdata(data(:),'maxclust',nGrps); % do the cluster with those groups C is index to grp
cnts=accumarray(C,1); % the counts of each group
gmns=accumarray(C,data(:),[],@mean); % compute means of each group
NB: the (:) on data array to ensure have column vector as argument irrespective of actual orientation.