Verwendung des %*% Operators in R

Jesse John 30 Januar 2023
  1. Matrix und ihre Dimensionen in R
  2. Verwendung des Operators %*% zur Multiplikation von Matrizen in R
  3. Verwenden Sie den Operator %*%, um das Skalarprodukt von Vektoren in R zu erhalten
  4. Fazit
Verwendung des %*% Operators in R

Der Operator %*% wird für die Matrixmultiplikation verwendet. Bei Vektoren gleicher Länge ergibt dieser Operator das Skalarprodukt.

In diesem Artikel werden wir die Verwendung dieses Operators anhand einiger einfacher Beispiele untersuchen.

Matrix und ihre Dimensionen in R

Eine Matrix ist eine rechteckige Anordnung von Zahlen. Es ist wie eine Zahlentabelle mit Zeilen und Spalten.

Der folgende Code erstellt und zeigt vier Matrizen mit denselben 12 Zahlen an.

Beispielcode:

# 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))

Ausgabe:

> # 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

Jede Matrix, die wir oben erstellt haben, hatte eine andere Anzahl von Zeilen und Spalten.

Eine Matrix wird durch die Anzahl ihrer Zeilen und Spalten beschrieben; dies wird seine Dimension genannt. Eine Matrix mit m Zeilen und n Spalten wird als m x n-Matrix bezeichnet und als m mal n gelesen.

Die von uns erstellten Matrizen hatten die folgenden Dimensionen: 2x6, 3x4, 4x3 und 6x2.

Verwendung des Operators %*% zur Multiplikation von Matrizen in R

Die Matrixmultiplikation ist nur definiert, wenn die Spaltenzahl der ersten Matrix gleich der Zeilenzahl der zweiten Matrix ist. Wenn diese Bedingung erfüllt ist, können wir diese beiden Matrizen in dieser Reihenfolge mit dem Operator %*% multiplizieren, und das Produkt ist auch eine Matrix.

Die Produktmatrix hat so viele Zeilen wie die erste Matrix und so viele Spalten wie die zweite.

Beispielcode:

# 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

Ausgabe:

> # 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

Wir werden uns ein weiteres Beispiel für eine gültige Matrixmultiplikation und zwei Beispiele ansehen, bei denen die Matrixmultiplikation nicht definiert ist.

Beispielcode:

# 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

Ausgabe:

> # 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

Verwenden Sie den Operator %*%, um das Skalarprodukt von Vektoren in R zu erhalten

Vektoren werden durch ihre Länge und Klasse (und Typ) beschrieben.

Beispielcode:

# 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)

Ausgabe:

> # 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"

Die Länge eines Vektors ist die Anzahl der Elemente (Zahlen) darin.

Wenn wir zwei Vektoren gleicher Länge mit dem Operator %*% multiplizieren, erhalten wir das Skalarprodukt der Vektoren. R behandelt implizit den ersten Vektor als Zeilenmatrix und den zweiten Vektor als Spaltenmatrix und gibt uns die Produktmatrix.

Es gibt eher eine 1x1-Matrix als einen Skalar zurück. Wir können dies mit den Funktionen is.vector() und is.matrix() überprüfen.

Im folgenden Code erhalten wir zunächst das Skalarprodukt zwischen zwei Vektoren gleicher Länge. Wir werden dann das gleiche Ergebnis erhalten, wenn wir Matrizen mit konformen Dimensionen verwenden.

Beispielcode:

# 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

Ausgabe:

> # 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

Wir können das Skalarprodukt nicht berechnen, wenn die Vektoren unterschiedlich lang sind.

Beispielcode:

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

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

Ausgabe:

> # 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

Fazit

Bei konformen Matrizen für die Multiplikation gibt %*% die Produktmatrix zurück. Bei Vektoren gleicher Länge liefert er das Skalarprodukt als 1x1-Matrix.

Autor: 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.

Verwandter Artikel - R Matrix