« 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>
== 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
<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>
<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
|