Utilisez l'opérateur %*% dans R
- Matrice et ses dimensions dans R
-
Utilisez l’opérateur
%*%
pour multiplier les matrices dans R -
Utilisez l’opérateur
%*%
pour obtenir le produit scalaire des vecteurs dans R - Conclusion
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
.