Die NumPy-Funktion np.std
akzeptiert einen optionalen Parameter ddof
: "Delta Degrees of Freedom". Standardmäßig ist dies 0
. Stellen Sie es auf ein 1
, um das MATLAB-Ergebnis zu erhalten:
>>> np.std([1,3,4,6], ddof=1)
2.0816659994661326
Um etwas mehr Kontext hinzuzufügen, dividieren wir bei der Berechnung der Varianz (deren Standardabweichung die Quadratwurzel ist) normalerweise durch die Anzahl der Werte, die wir haben.
Wenn wir jedoch eine zufällige Stichprobe von N
Elementen aus einer größeren Verteilung auswählen und die Varianz berechnen, N
kann die Division durch zu einer Unterschätzung der tatsächlichen Varianz führen. Um dies zu beheben, können wir die Zahl, die wir durch ( die Freiheitsgrade ) teilen, auf eine Zahl senken, die kleiner als N
(normalerweise N-1
) ist. Mit dem ddof
Parameter können wir den Divisor um den von uns angegebenen Betrag ändern.
Sofern nicht anders angegeben, berechnet NumPy den voreingenommenen Schätzer für die Varianz ( ddof=0
dividiert durch N
). Dies ist das, was Sie möchten, wenn Sie mit der gesamten Verteilung arbeiten (und nicht mit einer Teilmenge von Werten, die zufällig aus einer größeren Verteilung ausgewählt wurden). Wenn der ddof
Parameter angegeben ist, wird N - ddof
stattdessen NumPy durch dividiert .
Das Standardverhalten von MATLABs std
besteht darin, die Abweichung für die Stichprobenvarianz durch Teilen durch zu korrigieren N-1
. Dadurch werden einige (aber wahrscheinlich nicht alle) Abweichungen in der Standardabweichung beseitigt. Dies ist wahrscheinlich das, was Sie möchten, wenn Sie die Funktion für eine Zufallsstichprobe einer größeren Verteilung verwenden.
Die nette Antwort von @hbaderts gibt weitere mathematische Details.
std([1 3 4 6],1)
entspricht NumPy Standardnp.std([1,3,4,6])
. All dies wird in der Dokumentation für Matlab und NumPy ganz klar erklärt. Ich empfehle daher dringend, dass das OP diese in Zukunft unbedingt liest.Die Standardabweichung ist die Quadratwurzel der Varianz. Die Varianz einer Zufallsvariablen
X
ist definiert alsEin Schätzer für die Varianz wäre daher
wobei bezeichnet den Stichprobenmittelwert. Für zufällig ausgewählte kann gezeigt werden, dass dieser Schätzer nicht zur realen Varianz konvergiert, sondern zu
Wenn Sie Stichproben zufällig auswählen und den Stichprobenmittelwert und die Varianz schätzen, müssen Sie einen korrigierten (unverzerrten) Schätzer verwenden
was zu konvergieren wird . Der Korrekturterm wird auch als Besselsche Korrektur bezeichnet.
Jetzt werden standardmäßig MATLABs
std
berechnet den unvoreingenommenen Schätzer mit dem Korrekturtermn-1
. NumPy berechnet jedoch (wie @ajcr erklärt) den voreingenommenen Schätzer standardmäßig ohne Korrekturterm. Mit dem Parameterddof
können Sie einen beliebigen Korrekturterm einstellenn-ddof
. Wenn Sie den Wert auf 1 setzen, erhalten Sie das gleiche Ergebnis wie in MATLAB.In ähnlicher Weise ermöglicht MATLAB das Hinzufügen eines zweiten Parameters
w
, der das "Wiegeschema" angibt. Der Standardwert ,,w=0
ergibt den Korrekturtermn-1
(unverzerrter Schätzer), während fürw=1
nur n als Korrekturterm (voreingenommener Schätzer) verwendet wird.quelle
n
oben in der Summationsnotation zu stehen, ging es in die Summe.Für Leute, die nicht gut mit Statistiken umgehen können, ist ein vereinfachter Leitfaden:
Schließen
ddof=1
Sie ein, wenn Sienp.std()
eine Stichprobe aus Ihrem vollständigen Datensatz berechnen .Stellen
ddof=0
Sie sicher, dass Sienp.std()
für die gesamte Bevölkerung rechnenDer DDOF ist für Abtastwerte enthalten, um die Vorspannung auszugleichen, die in den Zahlen auftreten kann.
quelle