1. Qu’est ce que c’est ?

Les matrices creuses ou sparse matrix sont des matrices qui contiennent beaucoup de zéros (ex : matrice d’adjacence, matrice diagonale…). Ces matrices peuvent prendre beaucoup de place et il est donc judicieux d’utiliser des fonctions spéciales pour ce genre de matrice afin de les rendre plus légères : les valeurs nulles vont être remplacées par un point ..

2. Utilisation des matrices creuses

2.1 Avec le package Matrix

## 
## Attaching package: 'Matrix'
## The following object is masked from 'package:tidyr':
## 
##     expand
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    0    0    0    0    0
## [2,]    0    0    0    0    0
## [3,]    0    0    0    0    0
## [4,]    0    0    0    0    0
## [5,]    0    0    0    0    0
## 8000216 bytes
## 5 x 5 sparse Matrix of class "dsCMatrix"
##               
## [1,] . . . . .
## [2,] . . . . .
## [3,] . . . . .
## [4,] . . . . .
## [5,] . . . . .
## 5728 bytes

Selon le type de données que l’on possède plusieurs stratégies de création de matrice creuse sont possibles.

2.1.1- Transformer à l’aide des fonctions as ou Matrix

## 40216 bytes
## 13728 bytes
## 13728 bytes

Par défaut, lorsque l’on renseigne la classe sparseMatrix la compression se fera automatiquement par colonne, mais il est possible de choisir entre une compression par ligne ou par colonne avec les arguments suivant :

  • par colonne avec as(dt, "dgCMatrix")
  • par ligne avec as(dt, "dgRMatrix")

Ce choix de compression peut s’avérer utile si l’on veut travailler par ligne ou par colonne.

Autre choix de compression :

Class Compression Type
ngeMatrix none logicals
dgeMatrix none real numbers
dgCMatrix compressed sparse column real numbers
dgRMatrix compressed sparse row real numbers
ngCMatrix compressed sparse column logicals
ngRMatrix compressed sparse row real numbers

2.2 Avec le package slam

## 1952 bytes

Attention :

## A 100x100 simple triplet matrix.

slam ne permet pas de visualiser la forme de la matrice comme on a pu le voir avec Matrix, mais l’ensemble du triplet est renseigné dans les arguments de la fonction :

3. Quelques infos utiles

La taille des matrice obtenue précédemment à l’aide de slamet Matrix ne sont pas de taille similaire mais sela peut s’expliquer par la simulation d’une petite matrice. Il est important de savoir que transformer une matrice pleine en matrice creuse n’est intéressant que si on travaille sur de très grosses matrices et au moins 50% de présence de valeurs nulles.
Les matrices creuses prennent donc moins de place et se stockent dans l’environnement R plus facilement ce qui peut entrainer une réduction considérable du temps de calcul.

Liens utiles

https://www.gormanalysis.com/blog/sparse-matrix-construction-and-use-in-r/
https://r2014-mtp.sciencesconf.org/file/92662