4 Stimmen

Wie findet man effizient Korrelation und verwirft Punkte außerhalb des 3-Sigma-Bereichs in MATLAB?

Ich habe eine Datendatei m.txt, die ungefähr so aussieht (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 unterschiedlich von den Werten, die ich normalerweise erwarte (kleinere Zahlen).

  • Also überlege ich, alle Punkte außerhalb des 3-Sigma Bereichs zu entfernen. Wie kann ich das in MATLAB machen?

  • Außerdem ist das größere Problem, dass diese Datei eine separate Datei t.txt hat, die die entsprechenden Zeitwerte für diese Zahlen speichert. Also muss ich die entsprechenden Zeitwerte auch aus der Datei t.txt entfernen.

Ich lerne immer noch MATLAB und ich weiß, dass es einen besseren Weg gibt, dies zu tun (besser als Indizes der Elemente zu speichern, die aus m.txt entfernt wurden und dann diese Elemente aus der Datei t.txt zu entfernen)

7voto

Nzbuu Punkte 5182

@Amro ist nahe dran, aber das FIND ist überflüssig (siehe logische Indizierung) und du musst den Mittelwert für einen echten +/-3 Sigma-Bereich einschließen. Ich würde mich für folgendes entscheiden:

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

%# Werte im Bereich finden
z = 3;
meanM = mean(m);
sigmaM = std(m);
I = abs(m - meanM) <= z * sigmaM;

%# Werte im Bereich behalten
m = m(I);
t = t(I);

4voto

Amro Punkte 122495
%# Lade Dateien
m = load('m.txt');
t = load('t.txt');

%# Finde Ausreißer-Indizes
z = 3;
idx = find( abs(m-mean(m)) > z*std(m) );

%# Entferne sie aus den Daten- und Zeitwerten
m(idx) = [];
t(idx) = [];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X