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.