R에서 %*% 연산자 사용

Jesse John 2023년1월30일
  1. R의 행렬과 차원
  2. %*% 연산자를 사용하여 R의 행렬 곱하기
  3. %*% 연산자를 사용하여 R에서 벡터의 내적 구하기
  4. 결론
R에서 %*% 연산자 사용

%*% 연산자는 행렬 곱셈에 사용됩니다. 길이가 같은 벡터에서 이 연산자는 내적을 제공합니다.

이 기사에서는 몇 가지 간단한 예를 통해 이 연산자의 사용을 살펴보겠습니다.

R의 행렬과 차원

행렬은 숫자의 직사각형 배열입니다. 행과 열이 있는 숫자 테이블과 같습니다.

다음 코드는 동일한 12개의 숫자를 사용하여 4개의 행렬을 만들고 표시합니다.

예제 코드:

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

출력:

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

위에서 만든 각 행렬에는 행과 열 수가 다릅니다.

행렬은 행과 열의 수로 설명됩니다. 이것을 차원이라고 합니다. m 행과 n 열이 있는 행렬을 m x n 행렬이라고 하며 m x n으로 읽습니다.

우리가 만든 행렬의 치수는 2x6, 3x4, 4x36x2입니다.

%*% 연산자를 사용하여 R의 행렬 곱하기

행렬 곱셈은 첫 번째 행렬의 열 번호가 두 번째 행렬의 행 수와 같을 때만 정의됩니다. 이 조건이 충족되면 %*% 연산자를 사용하여 두 행렬을 순서대로 곱할 수 있으며 곱도 행렬입니다.

곱 행렬에는 첫 번째 행렬만큼 많은 행이 있고 두 번째 행렬만큼 많은 열이 있습니다.

예제 코드:

# 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

출력:

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

유효한 행렬 곱셈의 또 다른 예와 행렬 곱셈이 정의되지 않은 두 가지 예를 살펴보겠습니다.

예제 코드:

# 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

출력:

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

%*% 연산자를 사용하여 R에서 벡터의 내적 구하기

벡터는 길이와 클래스(및 유형)로 설명됩니다.

예제 코드:

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

출력:

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

벡터의 길이는 그 안에 있는 요소(숫자)의 수입니다.

%*% 연산자를 사용하여 길이가 같은 두 벡터를 곱하면 벡터의 내적을 얻습니다. R은 암시적으로 첫 번째 벡터를 행 행렬로, 두 번째 벡터를 열 행렬로 취급하여 곱 행렬을 제공합니다.

스칼라가 아닌 1x1 행렬을 반환합니다. is.vector()is.matrix() 함수를 사용하여 이를 확인할 수 있습니다.

다음 코드에서는 먼저 길이가 같은 두 벡터 사이의 내적을 구합니다. 그런 다음 적합한 차원의 행렬을 사용하여 동일한 결과를 얻습니다.

예제 코드:

# 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

출력:

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

벡터의 길이가 다른 경우 내적을 계산할 수 없습니다.

예제 코드:

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

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

출력:

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

결론

곱셈에 적합한 행렬의 경우 %*%는 곱 행렬을 반환합니다. 길이가 같은 벡터의 경우 내적을 1x1 행렬로 반환합니다.

작가: 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.

관련 문장 - R Matrix