Funkcja NumPy np.std
przyjmuje opcjonalny parametr ddof
: "Delta Degrees of Freedom". Domyślnie jest to 0
. Ustawić go 1
aby uzyskać wynik MATLAB:
>>> np.std([1,3,4,6], ddof=1)
2.0816659994661326
dodać trochę więcej kontekstu, w celu obliczenia wariancji (z których odchylenie standardowe to pierwiastek kwadratowy) mamy zazwyczaj podzielić przez liczbę wartości, które mieć.
Ale jeśli wybierzemy losową próbkę z elementów N
z większej dystrybucji i obliczymy wariancję, dzielenie przez N
może prowadzić do zaniżenia rzeczywistej wariancji. Aby to naprawić, możemy obniżyć liczbę dzieloną przez (the degrees of freedom) na liczbę mniejszą niż N
(zwykle N-1
). Parametr ddof
pozwala nam zmienić dzielnik o określoną przez nas wartość.
Jeśli nie powiedziano inaczej, NumPy oblicza ukośny estymatora wariancji (ddof=0
dzieląc przez N
). Właśnie tego chcesz, jeśli pracujesz z całą dystrybucją (a nie podzbiorem wartości, które zostały losowo wybrane z większej dystrybucji). Jeśli podany zostanie parametr ddof
, NumPy podzieli się na N - ddof
.
Domyślnym zachowaniem parametru std
MATLAB jest skorygowanie odchylenia o wariancję próbki przez podzielenie przez N-1
. To pozbawia niektóre (ale prawdopodobnie nie wszystkie) odchylenia w odchyleniu standardowym. Jest to prawdopodobnie to, czego chcesz, jeśli używasz funkcji na losowej próbce o większej dystrybucji.
Przyjemna odpowiedź @hbadertsa zawiera dodatkowe szczegóły matematyczne.
Dodam, że w Matlab, 'std ([1 3 4 6], 1)' jest równoważne domyślnemu NumPy 'np.std ([1,3,4,6])'. Wszystko to jest dość jasno wyjaśnione w dokumentacji dla Matlaba i NumPy, więc zdecydowanie zalecam, aby OP był w przyszłości czytany. – horchler