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.

 Réponse acceptée

dpb
dpb le 3 Déc 2017
Modifié(e) : dpb le 3 Déc 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.

Plus de réponses (1)

Image Analyst
Image Analyst le 3 Déc 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.

Catégories

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by