How to cluster 1D array so that approximately equal values are replaced by their average?

I have a 1D array that features "double-counts". I would like to consolidate or cluster the dataset in a way that replaces the double-counts with the average of the two double-counted values. Here's a sample dataset
xx=[185.0712 185.0715 185.5117 186.1008 186.5077 187.1303 187.5037 188.1596 188.1597 188.4993 189.1890 189.4949 190.2185 190.4903 191.2477 191.2480].'
Here's a screenshot where I've circled the relevant entries that are double counts:
Does anyone know how to do this?

 Risposta accettata

[~, ~, G] = uniquetol(xx);
xxmean = grpstats(xx, G, 'mean');

3 Commenti

Thanks for your answer! However when I typed in exactly what you wrote, it throws an error.
close all
clear all
clc
xx=[185.0712 185.0715 185.5117 186.1008 186.5077 187.1303 187.5037 188.1596 188.1597 188.4993 189.1890 189.4949 190.2185 190.4903 191.2477 191.2480].'
[~, ~, G] = uniquetol(xx);
xxmean = grpstats(xx, G, 'mean');
This gives the error:
"Undefined function 'grpstats' for input arguments of type 'double'.
Error in Untitled7 (line 8)
xxmean = grpstats(xx, G, 'mean');"
Is grpstats part of some package or toolbox I need to download? Maybe part of the Statistics and Machine Learning Toolbox? https://www.mathworks.com/help/stats/index.html?s_tid=CRUX_lftnav
Statistics and Machine Learning Toolbox.
You can instead use
xx=[185.0712 185.0715 185.5117 186.1008 186.5077 187.1303 187.5037 188.1596 188.1597 188.4993 189.1890 189.4949 190.2185 190.4903 191.2477 191.2480].'
xx = 16×1
185.0712 185.0715 185.5117 186.1008 186.5077 187.1303 187.5037 188.1596 188.1597 188.4993
[~, ~, G] = uniquetol(xx, 1e-4);
xxmean = accumarray(G, xx, [], @mean)
xxmean = 13×1
185.0713 185.5117 186.1008 186.5077 187.1303 187.5037 188.1596 188.4993 189.1890 189.4949
I downloaded the toolbox and now both solutions work. Thanks!

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Loops and Conditional Statements in Centro assistenza e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by