Utilisez l'opérateur %*% dans R

Jesse John 30 janvier 2023
  1. Matrice et ses dimensions dans R
  2. Utilisez l’opérateur %*% pour multiplier les matrices dans R
  3. Utilisez l’opérateur %*% pour obtenir le produit scalaire des vecteurs dans R
  4. Conclusion
Utilisez l'opérateur %*% dans R

L’opérateur %*% est utilisé pour la multiplication matricielle. Dans des vecteurs de même longueur, cet opérateur donne le produit scalaire.

Dans cet article, nous allons explorer l’utilisation de cet opérateur avec quelques exemples simples.

Matrice et ses dimensions dans R

Une matrice est un tableau rectangulaire de nombres. C’est comme une table de nombres, avec des lignes et des colonnes.

Le code suivant crée et affiche quatre matrices utilisant les mêmes 12 nombres.

Exemple de code :

# First, we will create a vector of numbers.
# These 12 numbers are what we will place in our matrices.
v = 7:18

# Matrix with 2 rows and 6 columns.
matrix(v, nrow=2)
dim(matrix(v, nrow=2))

# Matrix with 3 rows and 4 columns.
matrix(v, nrow=3)
dim(matrix(v, nrow=3))

# Matrix with 4 rows and 3 columns.
matrix(v, nrow=4)
dim(matrix(v, nrow=4))

# Matrix with 6 rows and 2 columns.
matrix(v, nrow=6)
dim(matrix(v, nrow=6))

Production:

> # Matrix with 2 rows and 6 columns.
> matrix(v, nrow=2)
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    7    9   11   13   15   17
[2,]    8   10   12   14   16   18
> dim(matrix(v, nrow=2))
[1] 2 6
> # Matrix with 3 rows and 4 columns.
> matrix(v, nrow=3)
     [,1] [,2] [,3] [,4]
[1,]    7   10   13   16
[2,]    8   11   14   17
[3,]    9   12   15   18
> dim(matrix(v, nrow=3))
[1] 3 4
> # Matrix with 4 rows and 3 columns.
> matrix(v, nrow=4)
     [,1] [,2] [,3]
[1,]    7   11   15
[2,]    8   12   16
[3,]    9   13   17
[4,]   10   14   18
> dim(matrix(v, nrow=4))
[1] 4 3
> # Matrix with 6 rows and 2 columns.
> matrix(v, nrow=6)
     [,1] [,2]
[1,]    7   13
[2,]    8   14
[3,]    9   15
[4,]   10   16
[5,]   11   17
[6,]   12   18
> dim(matrix(v, nrow=6))
[1] 6 2

Chaque matrice que nous avons créée ci-dessus avait un nombre différent de lignes et de colonnes.

Une matrice est décrite par le nombre de ses lignes et de ses colonnes ; c’est ce qu’on appelle sa dimension. Une matrice avec m lignes et n colonnes est appelée matrice m x n, et se lit comme m par n.

Les matrices que nous avons créées avaient les dimensions suivantes : 2x6, 3x4, 4x3 et 6x2.

Utilisez l’opérateur %*% pour multiplier les matrices dans R

La multiplication matricielle n’est définie que lorsque le numéro de colonne de la première matrice est égal au nombre de lignes de la deuxième matrice. Lorsque cette condition est satisfaite, nous pouvons multiplier ces deux matrices dans cet ordre en utilisant l’opérateur %*%, et le produit est également une matrice.

La matrice produit aura autant de lignes que la première matrice et autant de colonnes que la seconde.

Exemple de code :

# First, we will create two matrices for which multiplication is defined.
Ist = matrix(v, ncol=3)
Ist

IInd = matrix(v, nrow=3)
IInd

# Find the product matrix.
Ist %*% IInd

Production:

> # First, we will create two matrices for which multiplication is defined.
> Ist = matrix(v, ncol=3)
> Ist
     [,1] [,2] [,3]
[1,]    7   11   15
[2,]    8   12   16
[3,]    9   13   17
[4,]   10   14   18
> IInd = matrix(v, nrow=3)
> IInd
     [,1] [,2] [,3] [,4]
[1,]    7   10   13   16
[2,]    8   11   14   17
[3,]    9   12   15   18

> # Find the product matrix.
> Ist %*% IInd
     [,1] [,2] [,3] [,4]
[1,]  272  371  470  569
[2,]  296  404  512  620
[3,]  320  437  554  671
[4,]  344  470  596  722

Nous examinerons un autre exemple de multiplication matricielle valide et deux exemples où la multiplication matricielle n’est pas définie.

Exemple de code :

# A 3 x 2 matrix.
IInd_b = matrix(20:25, nrow=3)
IInd_b

# A 2 x 6 matrix.
Ist_b = matrix(v, nrow=2)
Ist_b

# Matrix multiplication is defined between Ist and IInd_b.
Ist %*% IInd_b

# Multiplication is NOT defined in the following two cases.
IInd_b %*% Ist
Ist_b %*% IInd_b

Production:

> # A 3 x 2 matrix.
> IInd_b = matrix(20:25, nrow=3)
> IInd_b
     [,1] [,2]
[1,]   20   23
[2,]   21   24
[3,]   22   25

> # A 2 x 6 matrix.
> Ist_b = matrix(v, nrow=2)
> Ist_b
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    7    9   11   13   15   17
[2,]    8   10   12   14   16   18

> # Matrix multiplication is defined between Ist and IInd_b.
> Ist %*% IInd_b
     [,1] [,2]
[1,]  701  800
[2,]  764  872
[3,]  827  944
[4,]  890 1016

> # Multiplication is NOT defined in the following two cases.
> IInd_b %*% Ist
Error in IInd_b %*% Ist : non-conformable arguments

> Ist_b %*% IInd_b
Error in Ist_b %*% IInd_b : non-conformable arguments

Utilisez l’opérateur %*% pour obtenir le produit scalaire des vecteurs dans R

Les vecteurs sont décrits par leur longueur et leur classe (et leur type).

Exemple de code :

# Create a vector.
vtr = c(11,22,33)

# Check that it is a vector.
is.vector(vtr)

# Length of the vector.
length(vtr)

# Class of the vector.
class(vtr)

# Type of the vector.
typeof(vtr)

Production:

> # Create a vector.
> vtr = c(11,22,33)

> # Check that it is a vector.
> is.vector(vtr)
[1] TRUE

> # Length of the vector.
> length(vtr)
[1] 3

> # Class of the vector.
> class(vtr)
[1] "numeric"
> # Type of the vector.
> typeof(vtr)
[1] "double"

La longueur d’un vecteur est le nombre d’éléments (nombres) qu’il contient.

Lorsque nous multiplions deux vecteurs de même longueur à l’aide de l’opérateur %*%, nous obtenons le produit scalaire des vecteurs. R traite implicitement le premier vecteur comme une matrice-ligne et le second vecteur comme une matrice-colonne et nous donne la matrice produit.

Il renvoie une matrice 1x1 plutôt qu’un scalaire. Nous pouvons le vérifier en utilisant les fonctions is.vector() et is.matrix().

Dans le code suivant, nous allons d’abord obtenir le produit scalaire entre deux vecteurs de même longueur. Nous obtiendrons alors le même résultat en utilisant des matrices de dimensions conformes.

Exemple de code :

# Four-element vectors.
V_I = 22:25
V_II = 2:5

# Dot product of vectors of the same dimension.
V_I %*% V_II

# Check the input and output.
is.vector(V_I)
is.matrix(V_I)
is.vector(V_I %*% V_II)
is.matrix(V_I %*% V_II)

# Create matrices of conformable dimensions (where matrix multiplication is defined).
m_I = matrix(V_I, nrow=1)
m_I
m_II = matrix(V_II, ncol=1)
m_II
# Matrix product.
m_I %*% m_II

Production:

> # Four-element vectors.
> V_I = 22:25
> V_II = 2:5

> # Dot product of vectors of the same dimension.
> V_I %*% V_II
     [,1]
[1,]  334

> # Check the input and output.
> is.vector(V_I)
[1] TRUE
> is.matrix(V_I)
[1] FALSE
> is.vector(V_I %*% V_II)
[1] FALSE
> is.matrix(V_I %*% V_II)
[1] TRUE

> # Create matrices of conformable dimensions (where matrix multiplication is defined).
> m_I = matrix(V_I, nrow=1)
> m_I
     [,1] [,2] [,3] [,4]
[1,]   22   23   24   25
> m_II = matrix(V_II, ncol=1)
> m_II
     [,1]
[1,]    2
[2,]    3
[3,]    4
[4,]    5
> # Matrix product.
> m_I %*% m_II
     [,1]
[1,]  334

Nous ne pouvons pas calculer le produit scalaire si les vecteurs sont de longueurs différentes.

Exemple de code :

# A three-element vector.
V_II_b = 6:8

# Dot product is not possible.
V_I %*% V_II_b

Production:

> # A three-element vector.
> V_II_b = 6:8

> # Dot product is not possible.
> V_I %*% V_II_b
Error in V_I %*% V_II_b : non-conformable arguments

Conclusion

Pour les matrices conformes pour la multiplication, %*% renvoie la matrice produit. Pour des vecteurs de même longueur, il renvoie le produit scalaire sous la forme d’une matrice 1x1.

Auteur: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

Article connexe - R Matrix