Take mean value when elements inside array "clump up"

4 visualizaciones (últimos 30 días)
Ko Fa
Ko Fa el 27 de Jul. de 2020
Comentada: Ko Fa el 28 de Jul. de 2020
I have an Array,for example:
r1 = rand(1000,1)
sort(r1)
and have this sorted in ascending order. What Im trying to accomplish is: I want to take the mean value whenever the values inside the arrays clump up and are in between a specific threshold. Trying to explain this in an example:
a = [1; 10; 15; 16; 16.1; 16.2; 16.3; 18]
Mean Value should always be taken when the number inside the array have a maximum difference of 0.5.
So here essentially this should be taken:
a_sub = [16; 16.1; 16.2; 16.3]
mean(a_sub)
I hope this is understandable. Any help is greatly appreciated.
  4 comentarios
the cyclist
the cyclist el 27 de Jul. de 2020
Could there be more than one cluster in the same array? For example, could the input be something like
a = [0.1 0.2 0.3 5 6 7 0.8 0.9 1.0];
?

Iniciar sesión para comentar.

Respuesta aceptada

the cyclist
the cyclist el 27 de Jul. de 2020
Editada: the cyclist el 27 de Jul. de 2020
Assuming that my guess about the correct output is correct, then the following should work.
% Original (sorted) data
a = [1; 10; 15; 16; 16.1; 16.2; 16.3; 18];
% The difference threshold
d = 0.5;
% Identify which "cluster" each value belongs to. This part is slightly tricky.
% The diff command will result in a value of 1 if the prior value is more than the threshold.
% By taking the cumulative sum, the index will therefore move to the next value.
clusterIndex = cumsum(diff([a(1); a]) > d) + 1;
% According to the index, take the mean over values that belong to the same cluster
out = accumarray(clusterIndex,a,[],@mean);
  3 comentarios
the cyclist
the cyclist el 28 de Jul. de 2020
a = [1; 2.1; 2.2; 10; 15; 16; 16.1; 16.2; 16.3; 18];
d = 0.5;
clusterIndex = cumsum(diff([a(1); a]) > d) + 1;
numberInCluster = histcounts(clusterIndex);
clusterMeans = accumarray(clusterIndex,a,[],@mean);
clusterMeansWithMoreThanOneValue = clusterMeans(numberInCluster>1);
Ko Fa
Ko Fa el 28 de Jul. de 2020
Thank you kind sir! I

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Shifting and Sorting Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by