====== Manipulations de matrices ====== Les matrices sont des tableaux de nombres à deux dimensions. On peut utiliser des listes de lignes, qui sont elles-mêmes des listes d'éléments de la ligne, pour représenter une matrice. On aura donc des listes de listes. ===== Produit matriciel à l'aide de listes ===== Le [[wp>fr:Produit_matriciel|produit matriciel]] de deux matrices A et B nécessite que le nombre de colonnes de la matrice A soit égal au nombre de lignes de la matrice B. Pour obtenir le produit qui sera une matrice comportant le même nombre de lignes que A et le même nombre de colonnes que B, on effectue pour chaque élément de la ligne i et de la colonne j le produit scalaire de la ligne i de A et de la colonne j de B. On utilise un indice k qui prendra autant de valeur qu'il y a de colonnes de la matrice A ou de lignes de la matrice B. Pour des matrices carrées de dimension n, le produit matriciel conduit à un algorithme de complexité égale à n³. Exemple de programme Python : #! /usr/bin/env python # -*- coding: utf-8 -*- """ Calcul matriciel : multiplication Utilisation de listes de listes pour représenter les matrices """ mat1=[[7,9], [2,-5], [11,0], [6,-7], ] print(mat1) # pour visualiser la matrice mat1 de 4 lignes de 2 colonnes mat2=[[1,3,5], [2,4,6], ] print(mat2) # pour visualiser la matrice mat2 de 2 lignes de 3 colonnes if len(mat1[0]) == len(mat2): # Les matrices sont compatibles mprod=[] # initialisation de la matrice produit for i in range(len(mat1)): li = [] # initialisation d'une ligne for j in range(len(mat2[0])): elem = 0 # initialisation d'un élément au sein de la ligne for k in range(len(mat1[0])): elem = elem + mat1[i][k] * mat2[k][j] li.append(elem) mprod.append(li) print(mprod) # pour visualiser la matrice produit ===== Utiliser NumPy ===== La librairie [[[[numpy_simple|Numpy]] permet d'effectuer efficacement de nombreux calculs matriciels. Voici la même multiplication que l'exemple précédent, en utilisant cette fois NumPy : #! /usr/bin/env python # -*- coding: utf-8 -*- """ Calcul matriciel : multiplication Utilisation de numpy (array,...) pour représenter les matrices et effectuer les calculs d'algèbre linéaire """ import numpy as np mat1 = np.array([[7,9],[2,-5],[11,0],[6,-7]]) print(mat1) # pour visualiser la matrice mat1 de 4 lignes de 2 colonnes mat2=np.array([[1,3,5],[2,4,6]]) print(mat2) # pour visualiser la matrice mat2 de 2 lignes de 3 colonnes print(np.dot(mat1,mat2)) # pour visualiser la matrice produit