HOWTO · NumPy

Calculer la valeur absolue dans NumPy

Il existe 3 méthodes qui peuvent être utilisées pour calculer la valeur absolue dans NumPy, la fonction abs(), la fonction numpy.absolute() et la fonction numpy.abs() .

Sur cette page

Le calcul des valeurs absolues est une opération fondamentale dans l’analyse de données et le calcul scientifique. En Python, la bibliothèque NumPy offre des moyens efficaces d’effectuer cette opération sur les tableaux et les données numériques. Que vous traitiez une simple liste de nombres ou des tableaux multidimensionnels complexes, comprendre comment calculer les valeurs absolues peut améliorer vos compétences en manipulation de données.

Dans cet article, nous allons explorer trois méthodes principales pour calculer les valeurs absolues dans NumPy : la fonction abs(), numpy.absolute() et numpy.abs(). Les trois sont étroitement liées - sur un tableau NumPy, elles exécutent toutes la même opération élément par élément - donc ce guide se concentre sur ce qui les différencie réellement : les entrées que chacune accepte et les contrôles supplémentaires qu’offrent les fonctions NumPy.

Utiliser la fonction intégrée abs()

La fonction abs() est une fonction intégrée de Python qui renvoie la valeur absolue d’un nombre. Bien qu’elle ne soit pas spécifique à NumPy, elle fonctionne avec les tableaux NumPy : lorsque vous appliquez abs() à un tableau, Python appelle la méthode __abs__() du tableau, qui est la propre opération de valeur absolue de NumPy, et vous obtenez un nouveau tableau contenant les valeurs absolues des éléments d’origine.

Voici comment utiliser la fonction abs() avec NumPy :

import numpy as np

array = np.array([-1, -2, 3, -4])
absolute_values = abs(array)

print(absolute_values)

Sortie :

[1 2 3 4]

Comme abs() transmet simplement l’appel à la méthode __abs__() du tableau, elle effectue exactement le même calcul que numpy.absolute() sur un tableau - utiliser la fonction intégrée sur des données NumPy n’entraîne aucune pénalité de performance. Sa véritable limite est ailleurs : abs() a besoin d’un objet qui définit __abs__(). Elle fonctionne sur les nombres Python, les nombres complexes et les tableaux NumPy, mais appeler abs() sur une simple liste Python lève une TypeError, alors que les fonctions NumPy ci-dessous acceptent directement les listes.

Utiliser numpy.absolute()

numpy.absolute() est la propre fonction de valeur absolue de NumPy, implémentée comme une ufunc. Elle calcule la valeur absolue élément par élément sur des tableaux de toute forme et de toute taille et, contrairement à la fonction intégrée, elle accepte aussi les entrées de type tableau, comme une simple liste, en les convertissant d’abord en tableau. En tant qu’ufunc, elle accepte également les paramètres ufunc habituels, par exemple out= pour écrire le résultat dans un tableau existant.

Voici un exemple d’utilisation de numpy.absolute() :

import numpy as np

array = np.array([[-1, -2, 3], [-4, 5, -6]])
absolute_values = np.absolute(array)

print(absolute_values)

Sortie :

[[1 2 3]
 [4 5 6]]

numpy.absolute() prend également en charge les nombres complexes et renvoie le module de chaque élément :

import numpy as np

complex_array = np.array([3 + 4j, -5 + 12j])
magnitudes = np.absolute(complex_array)

print(magnitudes)

Sortie :

[ 5. 13.]

Cela en fait un choix par défaut sûr pour les calculs scientifiques, où les données peuvent être multidimensionnelles ou complexes.

Utiliser numpy.abs()

numpy.abs() n’est pas du tout une implémentation distincte : c’est exactement le même objet fonction que numpy.absolute() - dans NumPy, np.abs is np.absolute s’évalue à True. Le nom plus court n’existe que comme alias pratique.

Voici comment utiliser numpy.abs() :

import numpy as np

array = np.array([[1, -2], [-3, 4]])
absolute_values = np.abs(array)

print(absolute_values)

Sortie :

[[1 2]
 [3 4]]

Comme les deux noms désignent une seule fonction, le choix entre numpy.abs() et numpy.absolute() n’est qu’une question de style ou de lisibilité dans votre code ; les résultats et les performances sont identiques dans les deux cas.

Conclusion

Calculer des valeurs absolues dans NumPy est simple, car les trois méthodes effectuent la même opération élément par élément sur les tableaux. Utilisez la fonction intégrée abs() lorsque vos valeurs sont déjà des tableaux NumPy ou de simples nombres et que vous voulez un code Python générique ; tournez-vous vers numpy.absolute() ou son alias numpy.abs() lorsque vous devez passer des données de type tableau, comme des listes, ou des options d’ufunc comme out=. Quelle que soit l’orthographe choisie, les nombres obtenus en retour sont les mêmes.

Questions fréquentes

  1. Quelle est la différence entre abs() et numpy.absolute() ?
    L’interface, pas le calcul. Sur un tableau NumPy, abs() appelle la méthode __abs__() du tableau, qui est la même opération que celle effectuée par numpy.absolute(). numpy.absolute() accepte en outre les entrées de type tableau, comme les listes, et les paramètres d’ufunc comme out= ; abs() lève une TypeError sur une simple liste, car les listes ne définissent pas __abs__().

  2. Puis-je utiliser numpy.abs() avec des nombres complexes ?
    Oui. Les trois méthodes renvoient le module d’un nombre complexe ; par exemple, les valeurs absolues de 3 + 4j et -5 + 12j sont 5.0 et 13.0, comme le montre l’exemple numpy.absolute() ci-dessus.

  3. Existe-t-il des différences de performance entre ces méthodes ?
    Aucune qui soit significative. numpy.abs() et numpy.absolute() sont le même objet fonction, et abs() sur un tableau est dispatché vers la même opération NumPy, donc les trois effectuent le même travail élément par élément ; seule la surcharge d’appel diffère, et de façon négligeable.

  4. Quelle méthode dois-je utiliser pour les tableaux multidimensionnels ?
    N’importe laquelle - les trois gèrent les tableaux de toute forme, comme le montrent les exemples en deux dimensions ci-dessus. Préférez numpy.absolute() ou numpy.abs() si l’entrée peut être une liste ou un autre objet de type tableau, car la fonction intégrée abs() n’accepte que les objets qui définissent __abs__().

  5. Y a-t-il une différence de sortie lorsque l’on utilise ces fonctions ?
    Non. Pour la même entrée, les trois méthodes renvoient les mêmes valeurs.