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 | modifier le wikicode]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 | modifier le wikicode]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)
: x1 – x2 ;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 | modifier le wikicode]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 | modifier le wikicode]- 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 | modifier le wikicode]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 | modifier le wikicode]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 | modifier le wikicode]- (en) « Universal functions (ufunc) », sur Numpy and Scipy Documentation (consulté le 18 mai 2019)