MATLAB ohne Daten außerhalb 1 Standardabweichung
Frage
Ich bin unerfahren mit MATLAB, so sorry für den Neuling Frage:
Ich habe einen großen Vektor (905.350 Elemente) bekam eine ganze Reihe von Daten darin zu speichern. Ich habe die Standardabweichung und bedeuten, und jetzt will ich alle Datenpunkte auszuschneiden, die oberhalb / unterhalb einer Standardabweichung vom Mittelwert. Ich habe keine Ahnung, wie. Von dem, was ich sammeln muß ich eine doppelte Schleife von einer Art machen?
Es ist wie: mean-std
Lösung
Wenn die Daten in Variable A
, mit dem Mittelwert in meanA
gespeichert und die Standardabweichung in stdA
gespeichert, dann wird im Folgenden die Daten extrahieren, die Sie wollen, während die ursprüngliche Reihenfolge der Datenwerte beibehalten:
B = A((A > meanA-stdA) & (A < meanA+stdA));
Hier sind einige hilfreiche Dokumentation Links, die oben auf den Konzepten berühren verwendet: Matrix Indizierung .
Andere Tipps
Sie können einfach die Element-weise logische UND :
m = mean(A);
sd = std(A);
B = A( A>m-sd & A<m+sd );
Auch zu wissen, dass: |x|<c iff -c<x<c
, Sie beide in einem als kombinieren:
B = A( abs(A-m)<sd );
A wie Ihr ursprüngliches Vektor nehmen, und B als letzte ein:
B = sort(A)
B = B(find(B > mean-std,1,'first'):find(B < mean+std,1,'last'))
y = x(x > mean-std);
y = y(y < mean+std);
sollte funktionieren. Siehe FIND für weitere Details. Der Befehl FIND wird implizit in dem obigen Code verwendet wird.