La fonction NumPy np.std
prend un paramètre optionnel ddof
: "Delta Degrees of Freedom". Par défaut, c'est 0
. Réglez-le sur 1
pour obtenir le résultat MATLAB:
>>> np.std([1,3,4,6], ddof=1)
2.0816659994661326
Pour ajouter un peu plus de contexte, dans le calcul de la variance (dont l'écart type est la racine carrée), nous divisons généralement par le nombre de valeurs que nous avons.
Mais si nous sélectionnons un échantillon aléatoire d' N
éléments à partir d'une distribution plus large et calculons la variance, la division par N
peut conduire à une sous-estimation de la variance réelle. Pour résoudre ce problème, nous pouvons réduire le nombre par lequel nous divisons ( les degrés de liberté ) à un nombre inférieur à N
(généralement N-1
). Le ddof
paramètre nous permet de changer le diviseur du montant que nous spécifions.
Sauf indication contraire, NumPy calculera l' estimateur biaisé de la variance ( ddof=0
, en divisant par N
). C'est ce que vous voulez si vous travaillez avec la distribution entière (et non un sous-ensemble de valeurs qui ont été choisies au hasard dans une distribution plus large). Si le ddof
paramètre est donné, NumPy se divise par à la N - ddof
place.
Le comportement par défaut de MATLAB std
est de corriger le biais de la variance de l'échantillon en divisant par N-1
. Cela élimine une partie (mais probablement pas la totalité) du biais de l'écart type. C'est probablement ce que vous souhaitez si vous utilisez la fonction sur un échantillon aléatoire d'une distribution plus large.
La belle réponse de @hbaderts donne d'autres détails mathématiques.
std([1 3 4 6],1)
équivaut à la valeur par défaut de NumPynp.std([1,3,4,6])
. Tout cela est assez clairement expliqué dans la documentation de Matlab et NumPy, donc je recommande fortement que l'OP soit sûr de les lire à l'avenir.