Matrice creuse SciPy

Une matrice creuse désigne une matrice en analyse numérique dans laquelle la grande majorité des valeurs sont nulles. Inversement, si la plupart des éléments sont non nuls, la matrice est dense.

Les grandes matrices creuses apparaissent souvent lors de la résolution de modèles linéaires en sciences et en ingénierie.

Dans la figure ci-dessus, le côté gauche est une matrice creuse, dont on peut voir qu'elle contient de nombreux éléments nuls, et le côté droit est une matrice dense, où la plupart des éléments sont non nuls.

Regardons un exemple simple :

La matrice creuse ci-dessus ne contient que 9 éléments non nuls et contient également 26 éléments nuls. Sa sparsité est de 74%, et sa densité est de 26%.

Le modulescipy.sparsede SciPy fournit des fonctions pour le traitement des matrices creuses.

Nous utilisons principalement les deux types de matrices creuses suivants :

  • CSC - Compressed Sparse Column, compressée par colonne.
  • CSR - Compressed Sparse Row, compressée par ligne.

Dans ce chapitre, nous utilisons principalement la matrice CSR.

Matrice CSR

Nous pouvons passer à la fonctionscipy.sparse.csr_matrix()un tableau pour créer une matrice CSR.

Exemple

Créer une matrice CSR.

import numpy as np
from scipy.sparse import csr_matrix

arr = np.array([0, 0, 0, 0, 0, 1, 1, 0, 2])

print(csr_matrix(arr))

Le code ci-dessus produit le résultat suivant :

  (0, 5)        1
  (0, 6)        1
  (0, 8)        2

Analyse des résultats :

  • Première ligne : à la sixième position (valeur d'indice 5) dans la première ligne (valeur d'indice 0) de la matrice, il y a une valeur 1.
  • Deuxième ligne : à la septième position (valeur d'indice 6) dans la première ligne (valeur d'indice 0) de la matrice, il y a une valeur 1.
  • Troisième ligne : à la neuvième position (valeur d'indice 8) dans la première ligne (valeur d'indice 0) de la matrice, il y a une valeur 2.

Méthodes de la matrice CSR

Nous pouvons utiliser la propriétédatapour afficher les données stockées (en excluant les éléments 0) :

Exemple

import numpy as np
from scipy.sparse import csr_matrix

arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]])

print(csr_matrix(arr).data)

Le code ci-dessus produit le résultat suivant :

[1 1 2]

Utilisez la méthodecount_nonzero()pour calculer le nombre total d'éléments non nuls :

Exemple

import numpy as np
from scipy.sparse import csr_matrix

arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]])

print(csr_matrix(arr).count_nonzero())

Le code ci-dessus produit le résultat suivant :

3

Utilisez la méthodeeliminate_zeros()pour supprimer les éléments 0 de la matrice :

Exemple

import numpy as np
from scipy.sparse import csr_matrix

arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]])

mat = csr_matrix(arr)
mat.eliminate_zeros()

print(mat)

Le code ci-dessus produit le résultat suivant :

  (1, 2)    1
  (2, 0)    1
  (2, 2)    2

Utilisez la méthode sum_duplicates() pour supprimer les doublons :

Exemple

import numpy as np
from scipy.sparse import csr_matrix

arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]])

mat = csr_matrix(arr)
mat.sum_duplicates()

print(mat)

Le code ci-dessus produit le résultat suivant :

  (1, 2)    1
  (2, 0)    1
  (2, 2)    2

Convertissez CSR en CSC à l'aide de la méthode tocsc() :

Exemple

import numpy as np
from scipy.sparse import csr_matrix

arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]])

newarr = csr_matrix(arr).tocsc()

print(newarr)
  (2, 0)    1
  (1, 2)    1
  (2, 2)    2
Autres extensions