Numpy
Introduction
Tableaux multidimensionnels
Introduction aux tableaux multidimensionnels
La fonctionnalité de base de NumPy est ndarray, qui représente un tableau multidimensionnel. Pour en déclarer un, il suffit de créer une liste Python et d’utiliser le constructeur np.array.
On dispose d’une fonctionnalité permettant de produire des nombres à la manière du générateur range de Python ([min], max, [step]) :
Voici quelques exemples supplémentaires avec la fonction np.arange pour bien visualiser son fonctionnement :
Cet exemple montre également que lorsqu’on utilise un pas < 1, on obtient des nombres flottants (c’est aussi l’intérêt de arange : renvoyer des listes de réels, chose impossible avec range). En effet, tous les objets d’un tableau multidimensionnel sont forcement du même type.
Le type utilisé est un type géré par NumPy et la conversion avec les types Python se fait naturellement. Le fait d’utiliser ces types de bas niveau est une des clés qui permet d’avoir de bonnes performances. Admettons maintenant que nous soyons face à un tableau multidimensionnel et que nous souhaitions récupérer des informations.
Pour terminer cette introduction, voici comment créer des tableaux multidimensionnels rapidement en les remplissant de 0 ou de 1 (on en profite pour montrer une manière de déclarer le type) :
Le tout permet de créer très rapidement des tableaux de données de la dimension de son choix.
Opérateur crochet
S’il y a un opérateur qui est extrêmement utile et bien pensé, c’est bien l’opérateur crochet de Python. Cependant, NumPy le rend encore meilleur, c’est-à-dire avec toutes les qualités que l’on connaît à Python avec la gestion des dimensions. Reprenons l’exemple precedent :
Operations basiques
En premier lieu, les algorithmes usuels de Python fonctionnent toujours avec les objets NumPy
Mais ces objets ont beaucoup plus à offrir. Pour commencer, on va voir certaines opérations qui concernent les nombres contenus dans les tableaux, peu importe comment lesdits tableaux sont organisés.
On prend en compte ici l’ensemble des nombres présents dans le tableau. Mais comme on peut le voir dans l’exemple suivant, on peut aussi réaliser ces operations selon un axe donné :
Il existe également une opération permettant d’effectuer un produit scalaire. Pour cela, il faut que les tableaux multidimensionnels soient alignés, c’est-à-dire que le nombre de colonnes corresponde, sinon :
Avec deux opérandes corrects, on obtient un résultat :
Cette opération peut également être menée sur deux tableaux unidimensionnels et de même sens. Créons deux tableaux distincts :
On encore les tableaux multidimensionnels de sens contraire :
Tout autre chose, on peut également réaliser des additions, soustractions, multiplications ou divisions :
La encore, comme pour la multiplication entre deux tableaux multidimensionnels, on agit individuellement sur chaque membre du tableau en lui appliquant la transformation. On peut aussi citer ces deux exemples de transformation :
Une autre fonctionnalité intéressante des tableaux multidimensionnels est la possibilité de les concaténer verticalement ou horizontalement
Cela fonctionne également avec la fonction concatenate, en précisant éventuellement l’axe sur lequel l’opération doit avoir lieu (indispensable si l’on a plus de deux dimensions). Enfin, il est aussi possible de réaliser une transposée :
Mais attention, on parle bien ici de tableaux multidimensionnels et non pas de matrices. Autrement dit, une matrice n’est pas un tableau a deux dimensions. Ce sont des objets totalement différents, qui n’ont pas du tout la même utilisation.
Matrices
Une matrice, dans NumPy, est l’objet mathématique que l’on connaît. On entre ici dans l’algèbre linéaire. Nous n’allons pas rentrer dans un cours mathématique, mais nous précisons juste quelques notions élémentaires pour que la suite puisse bien se comprendre. Une matrice m x n est une matrice de m lignes et n colonnes. Des matrices sont dites de même taille si elles ont le meme nombre de lignes et de colonnes. Enfin, une matrice carrée est une matrice possédant le même nombre de lignes et de colonnes. Voici trois manières différentes de declarer une même matrice :
Seules des matrices de même taille peuvent s’additionner ou se soustraire, ou même se diviser, selon un procède identique aux tableaux a deux dimensions, c’est-à-dire que l’opération se passe en réalité entre chaque membre ayant la même position :
On peut aussi multiplier une matrice par un nombre, tout comme on l’a vu avec les tableaux multidimensionnels. Il est temps maintenant sur les elements spécifiques aux matrices et à l’algèbre linéaire. On peut commencer avec la recherche de la transposée.
Il faut, entre autres, faire ceci dans le bon sens. D’une part, dans l’exemple précédent, la transposition est prioritaire sur la multiplication. D’autre part, dans l’exemple suivant, il faut que les matrices soient multipliables
Dans cet exemple, on a déclare une matrice carrée. Une des opérations les plus utiles consiste à retrouver la matrice inverse A.I. Et enfin, voici la fonction permettant de gérer la résolution d’une équation d’algèbre linéaire.
On voit la l’utilisation du module linalg, un des modules importants de NumPy. Pour aller plus loin, vous pouvez vous rendre ici http://docs.scipy.org/doc/numpy/reference/routines.linalg.html. Voici cependant quelques exemples basiques, par exemple le determinant d’une matrice :
Polynômes
Le calcul polynomial est également une fonctionnalité importante pour le calcul scientifique. Cela sert, entre autres, en cryptographie par exemple. On va introduire ici la manière dont on peut déclarer un polynôme et les opérations courantes qu’il est possible de faire.
On a donc déclaré un polynôme de second degré, composé de trois monômes de degrés respectifs 0, 1, 2. Voici comment obtenir les coefficients de ces monômes :
Attention, pour cela, on a utilise l’opérateur crochet. À ne pas confondre avec l’opérateur parenthèse (appel de fonction en Python), qui permet d’appeler la fonction au sens mathématique du terme et d’obtenir la valeur du polynôme pour une valeur de la variable donnée.
Voici maintenant une petite liste des opérations qu’il est possible de réaliser sur un polynôme. Multiplication par une constante.
On peut également résoudre ces deux problématiques directement à partir des coefficients des monômes.
Enfin, on peut résoudre l’equation :
Et faire l’opération inverse, c’est-à-dire trouver le polynôme à partir des racines :
Voici la démarche complète pour créer l’objet polynôme :
Algèbre booléenne
Gardons à l’esprit qu’il n’y a pas que les nombres qui peuvent être utilisés. On peut également travailler avec des booléens et réaliser des opérations avec :
On sait ici, élément par élément, lesquels remplissent les conditions données. On peut également réaliser de l’algèbre booléenne.
Et enfin, l’utilisation des fonctionnalités basiques de Python est possible.
Conclusion
La programmation scientifique est une discipline à part entière. On a effleuré ici les possibilités offertes par NumPy. Ce module profite des possibilités du langage Python tout en apportant énormément de choses et le tout rend Python particulièrement attractif pour un public de chercheurs ou doctorants, entre autres, qui souhaite pouvoir faire du calcul scientifique sans avoir à devenir des spécialistes de la programmation.
Ce n’est pas pour cette seule raison que Python et NumPy sont choisis, puisque la raison principale reste le fait que la bibliothèque permette de combler un besoin extrêmement large, le tout avec une licence tres permissive.