2016-05-22 12 views
0

Schleifen vermeiden, gibt es eine Möglichkeit, eine Matrix von Daten um den Mittelwert der Spalten (oder Zeilen) zu zentrieren, skalieren jeden Eintrag um die Standardabweichung (auch spaltenweise oder Reihenweise)?scale() R Funktion entspricht in Octave/Matlab

In R ist dies einfach: scale(data, center = T, scale = T)).

Aber ich weiß nicht, wie die gleiche grundlegende Vorverarbeitung in Ocatave oder Matlab zu erreichen.

+0

Haben Sie sich diesen angesehen? http://stackoverflow.com/questions/4521593/fast-technique-for-normalizing-a-matrix-in-matlab – Gopala

Antwort

1

Es gibt keine einzige Funktion, die dies tut, aber Sie können den Parameter dim für std und mean verwenden, um dies zu erreichen. Wir können auch bsxfun verwenden, um alles in eine Zeile zu schreiben.

A = rand(5, 4); 

% Column-wise 
bsxfun(@rdivide, bsxfun(@minus, A, mean(A, 1)), std(A, [], 1)) 

% Row-wise 
bsxfun(@rdivide, bsxfun(@minus, A, mean(A, 2)), std(A, [], 2)) 

Erklärung

Mit dem dim Parameter mean können wir den Mittelwert für jede Spalte von A berechnen.

M = mean(A, 1) 

Dann können wir bsxfun verwenden den Mittelwert von jedem Wert in jeder Spalte (@minus) zu subtrahieren. Wir müssen bsxfun verwenden, da M1 x nCols ist und AnRows x nCols ist. bsxfun wird die Operation automatisch für uns übertragen.

B = bsxfun(@minus, A, M); 

Dann wollen wir die Standardabweichung von jeder Spalte berechnen, wieder mit dem dim Parameter (dritten Eingang).

S = std(A, [], 1) 

und teilen jede Spalte durch diese Standardabweichung

bsxfun(@rdivide, B, S); 

Also das bringt alle zusammen wir

bsxfun(@rdivide, bsxfun(@minus, A, mean(A, 1)), std(A, [], 1)) 

Um die zeilenweise Operation durchführen, alles, was wir tun müssen, ist, Schalten Sie den Parameter dim von 1 (Spalten) auf 2 (Zeilen) um.

+0

Völlig neu bei Ocatve/Matlab ... Würden Sie so freundlich sein, mir zu sagen, was '@' tut das? – Toni

+0

@AntoniParellada Hinzufügen einer Beschreibung jetzt. – Suever

+0

@AntoniParellada Möchten Sie es geteilt oder multipliziert mit der Standardabweichung? – Suever

4

In Octave haben Sie zwei Funktionen für dieses center() und zscore(). Zentrum nur den Mittelwert subtrahiert, während zscore auch durch sd unterteilt (eine Operation, manchmal bekannt als bekannt als Standardisierung)

Zentrum (x)

Zentrum Daten durch ihren Mittelwert subtrahiert wird.

Wenn x ein Vektor ist, subtrahieren Sie seinen Mittelwert. Wenn x eine Matrix ist, machen Sie das oben für jede Spalte. Wenn das optionale Argument dim angegeben ist, arbeiten Sie entlang dieser Dimension.

und

zscore (x, opt, dim) Berechnet den Z-Score von x

wenn x ein Vektor ist, dessen Mittelwert subtrahieren und Dividieren durch die Standardabweichung. Wenn die Standardabweichung Null ist, dividiere stattdessen durch 1.

Der optionale Parameter opt legt die zu verwendende Normalisierung fest, wenn die Standardabweichung berechnet und die gleiche Definition wie der entsprechende Parameter für std hat.

Wenn x eine Matrix ist, berechnen Sie entlang der ersten Nicht-Singleton-Dimension. Wenn das dritte optionale Argument dim angegeben ist, arbeiten Sie entlang dieser Dimension.