[Python] Pourquoi numd std () donne un résultat différent à matlab std ()?


Answers

L'écart-type est la racine carrée de la variance. La variance d'une variable aléatoire X est définie comme

Un estimateur de la variance serait donc

où désigne la moyenne de l'échantillon. Pour aléatoirement sélectionné , on peut montrer que cet estimateur ne converge pas vers la variance réelle, mais

Si vous choisissez au hasard des échantillons et estimez la moyenne et la variance de l'échantillon, vous devrez utiliser un estimateur corrigé (non biaisé)

qui convergera vers . Le terme correctif est également appelée correction de Bessel.

Par défaut, MATLABs std calcule l'estimateur sans biais avec le terme de correction n-1 . Cependant, NumPy (comme expliqué par @ajcr) calcule l'estimateur biaisé sans terme de correction par défaut. Le paramètre ddof permet de définir un terme de correction n-ddof . En le mettant à 1, vous obtenez le même résultat que dans MATLAB.

De même, MATLAB permet d'ajouter un deuxième paramètre w , qui spécifie le "schéma de pesée". La valeur par défaut, w=0 , donne le terme de correction n-1 (estimateur sans biais), alors que pour w=1 , seulement n est utilisé comme terme de correction (estimateur biaisé).

Question

J'essaye de convertir le code matlab en numpy et j'ai compris que numpy avait un résultat différent avec la fonction std.

dans matlab

std([1,3,4,6])
ans =  2.0817

en numpy

np.std([1,3,4,6])
1.8027756377319946

Est-ce normal? Et comment dois-je gérer cela?