Débordement rencontré dans la fonction numpy.exp() en Python

Vaibhav Vaibhav 30 mars 2022
Débordement rencontré dans la fonction numpy.exp() en Python

Le NumPy est un package Python riche en utilitaires pour jouer avec de grandes matrices et tableaux multidimensionnels et effectuer des opérations mathématiques complexes et simples sur eux.

Ces utilitaires sont dynamiques aux entrées et hautement optimisés et rapides. Le package NumPy a une fonction exp() qui calcule l’exponentielle de tous les éléments d’un tableau numpy d’entrée.

En d’autres termes, il calcule ex, x est chaque nombre du tableau numpy d’entrée, et e est le nombre d’Euler qui est approximativement égal à 2.71828.

Étant donné que ce calcul peut aboutir à un nombre énorme, certains types de données ne parviennent pas à gérer ces grandes valeurs, et par conséquent, cette fonction renverra inf et une erreur au lieu d’une valeur flottante valide.

Par exemple, cette fonction renverra 8.21840746e+307 pour numpy.exp(709) mais runtimeWarning: overflow encountered in exp inf pour numpy.exp(710).

Dans cet article, nous allons apprendre à résoudre ce problème.

Correction du débordement dans la fonction numpy.exp() dans Python NumPy

Nous devons stocker des valeurs dans un type de données capable de contenir des valeurs aussi importantes pour résoudre ce problème.

Par exemple, np.float128 peut contenir des nombres bien plus grands que float64 et float32. Tout ce que nous avons à faire est de simplement transtyper chaque valeur d’un tableau en un type de données plus grand et de le stocker dans un tableau numpy.

Le code Python suivant illustre cela.

import numpy as np

a = np.array([1223, 2563, 3266, 709, 710], dtype=np.float128)
print(np.exp(a))

Production :

[1.38723925e+0531 1.24956001e+1113 2.54552810e+1418 8.21840746e+0307
 2.23399477e+0308]

Bien que le code Python ci-dessus s’exécute de manière transparente sans aucun problème, nous sommes néanmoins sujets à la même erreur.

La raison derrière cela est assez simple; même np.float128 a une valeur seuil pour les nombres qu’il peut contenir. Chaque type de données a une majuscule, et si cette majuscule est franchie, les choses commencent à devenir boguées et les programmes commencent à rencontrer des erreurs de débordement.

Pour comprendre le point mentionné ci-dessus, reportez-vous au code Python suivant. Même si np.float128 a résolu notre problème dans le dernier extrait de code Python, cela ne fonctionnerait pas pour des valeurs encore plus grandes.

import numpy as np

a = np.array([1223324, 25636563, 32342266, 235350239, 27516346320], dtype=np.float128)
print(np.exp(a))

Production :

<string>:4: RuntimeWarning: overflow encountered in exp
[inf inf inf inf inf]

La fonction exp() renvoie un infini pour chaque valeur du tableau numpy.

Pour en savoir plus sur la fonction numpy.exp(), reportez-vous à la documentation officielle NumPy ici.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.