Find repeated close values in array

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.

 Respuesta aceptada

dpb
dpb el 3 de Dic. de 2017
Editada: dpb el 3 de Dic. de 2017
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.

Más respuestas (1)

Image Analyst
Image Analyst el 3 de Dic. de 2017
You can use pdist2() to find the "distance" of every element to every other element, if you have the Statistics and Machine Learning Toolbox:
v = [86558,29952,29809,29804,29750,29749,29556,29382,29379,28474,15093,14974,14234,14136]
distances = pdist2(v', v')
closeDistances = distances < 3000 % A logical matrix of whether they're close or not.

Categorías

Productos

Preguntada:

el 3 de Dic. de 2017

Respondida:

el 3 de Dic. de 2017

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by