Les matrices - équivalentes aux matrices en mathématiques - peuvent être vues comme des tableaux de valeurs, à double entrée. Une matrice est donc définie par son nombre de lignes et de colonnes. Ce sont des objets monotypes, c’est-à-dire de même type pour tous ses éléments. Chaque valeur de la matrice peut être repérée par son numéro de ligne et son numéro de colonne. Les deux attributs intrinsèques d’un objet R sont la longueur length
, qui correspond ici au nombre total d’éléments de la matrice, et le mode mode
, qui correspond ici au mode des éléments de cette matrice. Les matrices possèdent également l’attribut de dimension dim
, qui retourne le nombre de lignes et le nombre de colonnes.
Création d’une matrice
Voici les principales façons de créer une matrice. La plus utilisée est la fonction matrix
qui prend en arguments le vecteur d’éléments et les dimensions - nombre de lignes ou de colonnes - de la matrice. Par défaut, R range les valeurs dans une matrice par colonne. Pour ranger les éléments par ligne, on utilise l’argument byrow
:
x <- matrix(c(1:6),nrow=2,ncol=3,byrow=TRUE)
x
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 4 5 6
y <- matrix(1:2,ncol=1)
y
# [,1]
# [1,] 1
# [2,] 2
z <- matrix(3:1,ncol=3)
z
# [,1] [,2] [,3]
# [1,] 3 2 1
Lorsque la longueur du vecteur est différente du nombre d’éléments de la matrice, R remplit toute la matrice. Si le vecteur est trop grand, il prend les premiers éléments, si le vecteur est trop petit, R le répète :
m <- matrix(1:4,nrow=3,ncol=3)
m
# [,1] [,2] [,3]
# [1,] 1 4 3
# [2,] 2 1 4
# [3,] 3 2 1
Il est possible de remplir une matrice d’un élément unique sans avoir à créer le vecteur des éléments :
un <- matrix(1,nrow=2,ncol=4)
un
# [,1] [,2] [,3] [,4]
# [1,] 1 1 1 1
# [2,] 1 1 1 1
Un vecteur n’est pas considéré par R comme une matrice. Il est cependant possible de transformer un vecteur en une matrice unicolonne avec la fonction as.matrix
:
x <- seq(1,10,by=2)
x
# [1] 1 3 5 7 9
as.matrix(x)
# [,1]
# [1,] 1
# [2,] 3
# [3,] 5
# [4,] 7
# [5,] 9
Il est bien évidemment possible de créer une matrice de caractères :
matrix(c("A","B","C","A"),ncol=2)
# [,1] [,2]
# [1,] "A" "C"
# [2,] "B" "A"
Opérations entre matrices
Comme avec des matrices classiques, il est possible d’effectuer différentes opérations sur et avec des matrices. Considérons les deux matrices m
et n
suivantes :
m <- matrix(1:4,ncol=2)
m
# [,1] [,2]
# [1,] 1 3
# [2,] 2 4
n <- matrix(3:6,ncol=2,byrow=T)
n
# [,1] [,2]
# [1,] 3 4
# [2,] 5 6
Vous pouvez additionner deux matrices de même dimension :
m+n
# [,1] [,2]
# [1,] 4 7
# [2,] 7 10
Ou calculer le produit entre deux matrices, lorsque le nombre de lignes de la première est égal au nombre de colonnes de la deuxième.
m*n # produit élément par élément
# [,1] [,2]
# [1,] 3 12
# [2,] 10 24
Et vous pouvez y appliquer toute une série d’opérations mathématiques, qui vont s’effectuer élément par élément :
sin(m) # sinus élément par élément
exp(m) # exponentielle élément par élément
m^4 # puissance quatrième élément par élément
Le tableau suivant donne les principales fonctions utiles en algèbre linéaire que vous pouvez également utiliser :
Fonction | Description |
X%*%Y | produit (matriciel) de matrices |
t(X) | transposition d’une matrice |
diag(5) | matrice identité d’ordre 5 |
diag(vec) | matrice diagonale avec les valeurs du vecteur |
crossprod(X, Y) | produit croisé (t(X)%*%Y) |
det(X) | déterminant de la matrice X |
svd(X) | décomposition en valeurs singulières |
eigen(X) | diagonalisation d’une matrice |
solve(X) | inversion de matrice |
solve(A, b) | résolution de système linéaire |
chol(Y) | décomposition de Cholesky |
qr(Y) | décomposition QR |
Autres fonctions utiles
Nous présentons dans ce paragraphe quelques fonctions utiles pour manipuler vos matrices :
Dimensions : dim(X), nrow(X), ncol(X) donnent respectivement la dimension, le nombre de lignes et de colonnes de X.
X <- matrix(1:6,ncol=3)X# [,1] [,2] [,3]# [1,] 1 3 5# [2,] 2 4 6ncol(X)# [1] 3nrow(X)# [1] 2dim(X)# [1] 2 3Ces fonctions renvoient NULL si X est un vecteur.
Concaténation : par colonne avec la fonction
cbind
, par ligne avec la fonctionrbind
.cbind(c(1,2),c(3,4))# [,1] [,2]# [1,] 1 3# [2,] 2 4La fonction
apply
permet d’appliquer une fonction choisie aux lignes (MARGIN=1) ou aux colonnes (MARGIN=2) de la matrice. Par exemple :apply(X,MARGIN=2,sum) # sommes par colonne# [1] 3 7 11apply(X,1,mean) # moyennes par ligne# [1] 3 4
En résumé
Les matrices sont des sortes de tableaux monotypes à deux dimensions où chaque élément est identifié par son numéro de ligne et son numéro de colonne.
Vous pouvez créer une matrice soit à partir d’un objet existant (vecteur notamment), soit en définissant directement les éléments via la fonction matrix.
Vous pouvez réaliser de nombreuses opérations d’algèbre linéaire via différents opérateurs ou fonctions.
Il existe plusieurs fonctions permettant d’accéder aux dimensions (nombre de lignes, nombre de colonnes, etc.) et/ou de concaténer des matrices.
Maintenant que nous savons comment créer une matrice, nous allons voir comment créer des listes.