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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top