Wie kann man in MATLAB effizient Korrelationen finden und Punkte außerhalb des 3-Sigma-Bereichs verwerfen?

StackOverflow https://stackoverflow.com/questions/1728709

  •  19-09-2019
  •  | 
  •  

Frage

Ich habe eine Datendatei m.txt das sieht ungefähr so ​​aus (mit viel mehr Punkten):

286.842995
3.444398
3.707202
338.227797
3.597597
283.740414
3.514729
3.512116
3.744235
3.365461
3.384880

Einige der Werte (wie 338.227797) Sind sehr verschieden von den Werten, die ich im Allgemeinen erwarte (kleinere Zahlen).

  • Ich denke also, dass ich alle Punkte entfernen werde, die außerhalb der liegen 3-sigma range.Wie kann ich das in MATLAB machen?

  • Das größere Problem besteht außerdem darin, dass diese Datei eine separate Datei hat t.txt damit verbunden, der die entsprechenden Zeitwerte für diese Zahlen speichert.Daher muss ich die entsprechenden Zeitwerte aus dem entfernen t.txt Datei auch.

Ich lerne immer noch MATLAB und weiß, dass es dafür eine gute Möglichkeit gäbe (besser als die Speicherung von Indizes der Elemente, aus denen entfernt wurde). m.txt und dann diese Elemente aus dem entfernen t.txt Datei)

War es hilfreich?

Lösung

@Amro liegt nah dran, aber FIND ist nicht erforderlich (suchen Sie nach logischen Subskriptionen) und Sie müssen den Mittelwert für einen echten +/-3-Sigma-Bereich einbeziehen.Ich würde mit Folgendem vorgehen:

%# load files 
m = load('m.txt'); 
t = load('t.txt'); 

%# find values within range
z = 3;
meanM = mean(m);
sigmaM = std(m);
I = abs(m - meanM) <= z * sigmaM;

%# keep values within range
m = m(I);
t = t(I); 

Andere Tipps

%# load files
m = load('m.txt');
t = load('t.txt');

%# find outliers indices
z = 3;
idx = find( abs(m-mean(m)) > z*std(m) );

%# remove them from both data and time values
m(idx) = [];
t(idx) = [];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top