[PYTHON] Évitez l'avertissement [valeur non valide rencontrée dans true_divide] lorsqu'il est divisé par zéro

introduction

Ceci est un mémo d'apprentissage pour Python.

problème

S'il y a des 0 dans le tableau créé par numpy, la division par 0 donnera un avertissement. (Bien sûr)

problem.py


import numpy as np

A = np.array([0, 1, 2])
B = np.array([0, 1, 1])

print(A/B)
production> RuntimeWarning: invalid value encountered in true_divide
  print(A/B)
[nan  1.  2.]

Un avertissement est émis et la partie divisée par zéro est nan.

Solution

solved.py


import numpy as np

A = np.array([0, 1, 2], dtype=float)
B = np.array([0, 1, 1], dtype=float)

C = np.divide(A, B, out=np.zeros_like(A), where=B!=0)
print(C)
production> [0.  1.  2.]

np.zeros_like (A) renvoie un tableau rempli de zéros de la même forme que A. Vous pouvez également utiliser np.divide (A, B) pour diviser A par B. Selon la documentation, out est l'endroit pour enregistrer les résultats et où est l'option pour spécifier les conditions pour toutes les entrées. 0 est attribué au résultat du calcul de l'endroit où est faux (B [0] dans ce cas).

en conclusion

Bien sûr, l'avertissement a disparu, mais cela peut aider, alors je me demande si c'est vraiment une bonne solution.

Merci pour votre visite. Si vous avez des suggestions, veuillez les laisser dans la section commentaires.

URL de référence

https://stackoverflow.com/questions/26248654/how-to-return-0-with-divide-by-zero (consulté le 24 février 2020) https://docs.scipy.org/doc/numpy/reference/generated/numpy.divide.html(2020年2月24日閲覧) https://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros_like.html(2020年2月24日閲覧)

Recommended Posts

Évitez l'avertissement [valeur non valide rencontrée dans true_divide] lorsqu'il est divisé par zéro
[Numpy] Évitez d'avertir de 0 division
Rechercher par la valeur de l'instance dans la liste
Multipliez la valeur de l'axe x par n lors du traçage avec pylab
Remarques sur la coloration par valeur dans le diagramme de dispersion matplotlib
Soyez prudent lorsque vous spécifiez la valeur d'argument par défaut dans la série Python 3
Que faire lorsque le type de valeur est ambigu en Python?