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 M
1 x nCols
ist und A
nRows 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.
Haben Sie sich diesen angesehen? http://stackoverflow.com/questions/4521593/fast-technique-for-normalizing-a-matrix-in-matlab – Gopala