102 votes

avertissement 'valeur invalide rencontrée dans double_scalars', probablement numpy

Lorsque j'exécute mon code, je reçois ces avertissements, toujours par groupes de quatre, de façon sporadique. J'ai essayé d'en localiser la source en plaçant des messages de débogage avant et après certaines déclarations pour en déterminer l'origine.

Warning: invalid value encountered in double_scalars
Warning: invalid value encountered in double_scalars
Warning: invalid value encountered in double_scalars
Warning: invalid value encountered in double_scalars

Est-ce un avertissement Numpy, et qu'est-ce qu'un double scalaire ?

À partir de Numpy, j'utilise

min(), argmin(), mean() and random.randn()

J'utilise également Matplotlib

9 votes

Un scalaire double est une valeur de type double . On l'appelle scalaire pour le différencier dans numpy des tableaux doubles.

95voto

Volod Points 121

Dans mon cas, j'ai découvert que c'était une division par zéro.

2 votes

Le mien aussi. J'ai essayé de comparer exactement les mêmes vecteurs et j'ai obtenu une division par zéro.

2 votes

Ou en prenant la moyenne d'une liste vide. Oups.

11 votes

Une division par zéro n'entraînerait-elle pas une ZeroDivisionError ?

78voto

eumiro Points 56644

Cela ressemble à une erreur de calcul en virgule flottante. Vérifiez le numpy.seterr pour obtenir plus d'informations sur l'endroit où cela se passe.

20 votes

Plus précisément, utilisez numpy.seterr('raise') pour lever une exception en cas d'erreur.

15voto

Jeff Points 215

Parfois, les valeurs nulles ou NaN dans les données génèrent cette erreur avec Numpy. Si vous ingérez des données à partir d'un fichier CSV, par exemple, et que vous les exploitez ensuite à l'aide de tableaux numpy, le problème peut provenir de l'acquisition des données. Vous pouvez essayer de fournir à votre code un petit ensemble de données avec des valeurs connues, et voir si vous obtenez le même résultat.

6 votes

Quelque chose de similaire m'est arrivé, dans mon cas j'appelais la fonction moyenne de numpy sur un tableau vide.

1 votes

Une autre chose à laquelle il faut faire attention... J'obtiens également ceci lorsque j'essaie d'élever un nombre négatif à une puissance fractionnaire : ValueError : un nombre négatif ne peut pas être élevé à une puissance fractionnaire.

13voto

Dave Points 1573

Tableau de taille zéro passé à numpy.mean soulève cet avertissement (comme indiqué dans plusieurs commentaires).

Pour d'autres candidats :

  • median affiche également cet avertissement sur les tableaux de taille nulle.

les autres candidats ne soulèvent pas cet avertissement :

  • min,argmin les deux soulèvent ValueError sur un tableau vide
  • randn prend *arg ; en utilisant randn(*[]) renvoie un seul nombre aléatoire
  • std,var retourner nan sur un tableau vide

1voto

S_Dhungel Points 43

J'ai rencontré un problème similaire - Invalid value encountered in ... Après avoir passé beaucoup de temps à essayer de comprendre ce qui cause cette erreur, je crois que dans mon cas, c'était dû à un NaN dans mon cadre de données. Consultez le document Working with missing data in pandas.

Aucun == Aucun True

np.nan == np.nan Faux

Lorsque NaN n'est pas égal à NaN, les opérations arithmétiques comme la division et la multiplication provoquent cette erreur.

Il y a plusieurs choses que vous pouvez faire pour éviter ce problème :

  1. Utilisez pd.set_option pour définir le nombre de décimales à prendre en compte dans votre analyse afin qu'un nombre infiniment petit ne déclenche pas un problème similaire - ('display.float_format', lambda x : '%.3f' % x).

  2. Utilisez df.round() pour arrondir les chiffres afin que Panda élimine les chiffres restants de l'analyse. Et le plus important,

  3. Définissez NaN à zéro df=df.fillna(0). Faites attention si le fait de remplir NaN avec zéro ne s'applique pas à vos ensembles de données car cela traitera l'enregistrement comme un zéro, donc N dans la moyenne, std etc. change aussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X