Python pour le calcul scientifique/Fonctions mathématiques générales

Par défaut, Python ne propose que les quatre opérations et l'élévation à la puissance. Le module NumPy fournit les opérations mathématiques avancées. En particulier, il propose des fonctions « universelles » (ufunc) qui peuvent travailler directement sur des matrices.

Importer le module

modifier

Toutes les fonctions évoquées dans ce chapitre supposent l'import du module NumPy sous le nom « np » :

# Importer NumPy, sous le nom np
import numpy as np

# Ensuite, le code utilisant les fonctions de np
# ...

Fonctions universelles de base

modifier

On retrouve les quatre opérations mais sous la forme de fonctions de deux variables :

  • np.add(x1, x2) : x1 + x2 ;
  • np.subtract(x1, x2) : x1x2 ;
  • np.multiply(x1, x2) : x1 × x2 ;
  • np.divide(x1, x2), np.true_divide(x1, x2) : x1 ÷ x2.

Les variables x1 et x2 peuvent être des matrices de même dimension, les opérations sont alors faites élément par élément. Ces fonctions disposent en outre de méthodes, notamment de la méthode .accumulate() qui cumule les opérations, par exemple

np.add.accumulate([1, 2, 3, 4, 5])
# array([ 1,  3,  6, 10, 15])

Cette méthode existe d'ailleurs pour toutes les fonctions universelles de deux variables.

Les autres opérations de base sont :

  • np.negative(x) : –x ;
  • np.reciprocal(x) : 1 / x ;
  • np.mod(x1, x2), np.remainder(x1, x2) : reste de la division euclidienne x1 ÷ x2 ;
  • np.absolute(x), np.abs(x) : |x| ;
  • np.rint(x) : arrondit à l'entier le plus proche ;
  • np.floor(x), np.ceil(x) : arrondit respectivement à l'entier directement inférieur et supérieur ;
  • np.trunc(x) : tronque les décimales, partie entière, E(x) ;
  • np.sign(x) : signe de x (+1 ou –1) ;
  • np.gcd(x1, x2) : PGCD ;
  • np.lcm(x1, x2) : PPCM ;
  • np.mean([x1, x2, …, xn]) : moyenne des xi ;
  • np.average([x1, x2, …, xn], weights=[m1, m2, …, mn]) : moyenne des xi pondérée par mes masses mi.

Notez que les valeurs renvoyées par np.rint(), np.floor(), np.ceil() et np.trunc() sont des réels à virgule flottante (float) bien que les valeurs soient entières. Pour avoir des nombres de types « entier » (integer), il faut utiliser la fonction int() : int(np.rint())

Autres fonctions universelles

modifier
  • np.power(x1, x2) : x1x2 ;
  • np.square(x) : x2 ;
  • np.sqrt(x) :   ;
    si x est une matrice de réels, alors le résultat doit être réel, les valeurs négatives renvoient un NaN ; si x contient au moins un nombre complexe, alors le résultat est complexe, par exemple :
np.sqrt(-1) # NaN
np.sqrt(-1 + 0j) # 0 + 1j
np.sqrt(complex(-1)) # 0 + 1j
  • np.cbrt(x) :   ;
  • np.exp(x) : exp(x), ex ;
  • np.exp2(x) : 2x ;
  • np.expm1(x) : exp(x) – 1 ;
  • np.log(x) : ln(x), logarithme népérien ;
  • np.log2(x) : logarithme en base 2 ;
  • np.log10(x) : log(x), logarithme en base 10 ;
  • np.log1p(x) : ln(1 + x) ;
  • np.conj(z) : z, conjugué complexe ;
  • np.heavyside(x1, x2) : fonction marche, vaut 0 si x1 < 0, 1 si x1 > 0, et x2 si x1 = 0.

Autres fonctions

modifier
Fonctions trigonométriques
  • np.sin(x) : fonction sinus trigonométrique ;
  • np.cos(x) : fonction cosinus trigonométrique ;
  • np.tan(x) : fonction tangente trigonométrique ;
  • np.arcsin(x) : fonction sinus trigonométrique inverse ;
  • np.arccos(x) : fonction cosinus trigonométrique inverse ;
  • np.arctan(x) : fonction tangente trigonométrique inverse ;
  • np.arctan2(x1,x2) : fonction tangente trigonométrique inverse de   sélectionnant le bon quadrant selon les deux valeurs.
Fonctions hyperboliques
  • np.sinh(x) : fonction sinus hyperbolique ;
  • np.cosh(x) : fonction cosinus hyperbolique ;
  • np.tanh(x) : fonction tangente hyperbolique ;
  • np.arcsinh(x) : fonction sinus hyperbolique inverse ;
  • np.arccosh(x) : fonction cosinus hyperbolique inverse ;
  • np.arctanh(x) : fonction tangente hyperbolique inverse.

Précision

modifier

La précision de la représentation des réels en virgule flottante (float) est donnée par :

np.finfo(float).eps

Fonctions booléennes

modifier

Les fonctions booléennes sont incluses dans le langage de base :

  • x or y : ou ;
  • x and y : et ;
  • not x : non ;
  • all([x, y, z]) : et appliqué à une liste ;
  • any([x, y, z]) : ou appliqué à une liste.
 

Les fonctions all() et any() renvoient un seul et unique booléen. Si l'on veut appliquer un opérateur élément par élément à toute une liste, par exemple prendre la négation de chaque élément de la liste, il faut utiliser les fonctions de type numpy.logical_xxx de la bibliothèque NumPy.

Notes et références

modifier

Premiers programmes < > Éléments de programmation