« Python pour le calcul scientifique/Manipulation de matrices » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎Définir un tenseur : exemple déplacé dans les stats
m explicitation de l'espace de nom
Ligne 7 :
import matplotlib.pyplot as plt
</source>
Explication : le module NumPy contient de nombreuses fonctions spécifiques. Comme les modules sont développés par des équipes différentes, si l'on importe plusieurs modules, on risquerait d'avoir deux fonctions ayant le même nom. Pour éviter ceci, le nom du module précède le nom dela fonction ; ainsi, <code>numpy.arange()</code> désigne la fonction <code>arange()</code> définie dans NumPy. Cependant, comme il est fastidieux d'écrire à chaque fois <code>numpy.</code>, nous le remplaçons par l'abréviation <code>np</code>.
 
== Définir un tenseur ==
Un tenseur est similaire à une liste mais il est défini par la fonction <code>np.array()</code>. La définition et l'extraction de composante utilise la méthode du découpage en tranches ''({{lang|en|slicing}})''.
 
'''Exemples'''
Ligne 26 ⟶ 25 :
</source>
Notez que dans NumPy, un vecteur n'est pas la même chose qu'une matrice ligne ou colonne. Un vecteur de dimension ''n'' est un tenseur d'ordre 1 et de dimensindimension ''n'' ; une matrice ligne ou colonne est un tenseur d'ordre 2 et de dimension 1 × ''n'' ou ''n'' × 1.
<source lang="python">
a = np.array([1, 2, 3])
Ligne 36 ⟶ 35 :
</source>
 
La fonction <code>np.arange()</code> est similaire à la fonction <code>range()</code> pour les liste ; elle génère un vecteur de réels. La fonction <code>np.linspace()</code> permet également de créer un vecteur de même type mais on indique le dernier nombre alors que la règle du découpage en tranches fait que le nombre maximal indiqué à <code>np.arange()</code> est le premier nombre qui ne ''figure pas'' dans le vecteur.). La fonction <code>np.zeros()</code> génère une matrice nulle, <code>np.zeros_like()</code> une matrice nulle ayant les dimensions d'une matrice fournie comme modèle. De même, <code>np.ones()</code> et <code>np.ones_like()</code> crée des matrice dont toutes les composantes sont à 1. La fonction <code>np.eye()</code> crée une matrice unité.
 
'''Exemples'''
Ligne 53 ⟶ 52 :
</source>
 
La méthode <code>.reshape()</code> remet en forme une matrice. Par exemple, pour transformer un vecteur de dimension 9 en une matrice 3 × 3 :
<source lang="python">
a = np.arange(1, 10)
Ligne 60 ⟶ 59 :
c = np.arange(1, 10).reshape(3, 3)
</source>
La méthode <code>.fill()</code> remplit la matrice avec un scalaire :
<source lang="python">
b.fill(5) # remplace les valeurs de b par la valeur 5
Ligne 78 ⟶ 77 :
Outre le tranchage ''({{lang|en|slicing}})'', on peut utiliser deux autres méthodes pour extraire certaines valeurs d'une matrice :
* utiliser un vecteur ou une matrice d'indices, Python extrait alors les valeurs correspondant aux indices ;
* utiliser un vecteur ou une matrice de booléens de même dimension que a matrice ; Python extrait alors les valeurs correspondant aux <code>trueTrue</code>, la matrice booléenne est un « masque » pour la matrice d'origine. Par exemple :
 
<source lang="python">
Ligne 160 ⟶ 159 :
 
La classe <code>ndarray</code>, qui définit les matrices, possède un certain nombre d'attributs :
* <code>.shape</code> : dimensions de la matrice ;
* <code>.ndim</code> : ordre du tenseur ;
* <code>.size</code> : nombre d'éléments ;
* <code>.dtype</code> : type des éléments.
<source lang="python">
a = np.linspace(1, 9, 9)
Ligne 172 ⟶ 171 :
" ; dtype : ", a.dtype, "\n")
</source>
* <code>.real</code>, <code>.imag</code> : parties réelle et imaginaire de la matrice ;
* <code>.flat</code> : liste des éléments de la matrice ; les éléments sont réorganisés en une liste ;
* <code>.T</code> : transposée.
<source lang="python">a = np.arange(0, 9).reshape(3, 3)
print(a)
Ligne 198 ⟶ 197 :
 
La classe <code>ndarray</code> possède un certain nombre de méthodes :
* <code>.min()</code> et <code>max()</code> : valeurs respectivement minimale et maximale ;
* <code>.ptp()</code> : amplitude « max – min » ''({{lang|en|peak to peak}})'' ;
* <code>.argmin()</code> et <code>argmax()</code> : indice où se trouvent les valeurs respectivement minimale et maximale ;
* <code>.sum()</code>, <code>prod()</code> : somme et produit de tous les éléments de la matrice ;
* <code>.cumsum()</code>, <code>cumprod()</code> : somme et produit cumulés.
<source lang="python">
a = np.linspace(1, 9, 9)
Ligne 214 ⟶ 213 :
 
Méthodes statistiques :
* <code>.mean()</code> : moyenne ;
* <code>.std()</code> : écart type ''({{lang|en|standard deviation}})''.
 
Extraction de données :
* <code>.diagonal()</code> : vecteur contenant les éléments de la diagonale ;
* <code>.flatten()</code> : vecteur contenant les éléments réorganisés en liste ; par rapport à l'attribut <code>.flat</code>, on peut choisir le sens de linéarisation (par lignes, <code>.flatten(C)</code>, ou par colonnes, <code>.flatten(F)</code>) mais cela crée une copie, on ne peut pas par exemple s'en servir pour modifier la matrice ;
* <code>.tofile()</code> : crée un fichier texte contenant les valeurs de la matrice ; par exemple, pour une matrice <code>a</code> et pour séparer les valeurs par un point-virgule :
<source lang="python">
a.tofile("matriceA.txt", sep=" ; ")
Ligne 227 ⟶ 226 :
Algèbre linéaire :
* <code>a.dot(b)</code> : produit matriciel ''a''⋅''b'' ; on peut aussi écrire <code>a@b</code> ;
* <code>.trace()</code> : trace de la matrice (somme des éléménts diagonaux) ;
* <code>.transpose()</code> : transpose la matrice, résultat similaire à l'attribut <code>.T</code>.
 
Matrices de booléens :
* <code>.all()</code> : applique un « et » logique à toutes les valeurs de la matrice ;
* <code>.any()</code> : applique un « ou » logique à toutes les valeurs de la matrice.
 
Autre méthodes :
* <code>.conj()</code> : conjugué des valeurs complexes ;
* <code>.nonzero()</code> : n-uplet contenant les indices des valeurs non-nulles ;
* <code>.round(n)</code> : arrondit les valeurs à la ''n''-ième décimale.
 
; Ressources