좋은 질문입니다! numpy.matmul()
에서 2차원 배열과 1차원 배열을 곱할 때, 1차원 배열이 행벡터처럼 해석된다고 말씀드렸는데, 이는 다소 오해의 소지가 있을 수 있습니다. 사실 numpy.matmul()
에서 1차원 배열은 행벡터나 열벡터처럼 명시적으로 다루어지는 것이 아니라 벡터 그 자체로 처리되며, 이는 행렬 곱셈의 규칙에 맞도록 유연하게 동작합니다.
1차원 배열은 numpy
에서 벡터로 간주되며, 특정하게 행벡터나 열벡터로 해석되지 않습니다. 대신, 행렬 곱셈에서 자연스럽게 동작할 수 있도록 내부적으로 처리됩니다. 즉, 2차원 배열과 1차원 배열을 곱할 때, 1차원 배열은 행벡터나 열벡터로 해석되지 않고, 필요한 방식으로 곱셈이 수행됩니다.
행렬 곱셈에서는 기본적으로 첫 번째 행렬의 열 수와 두 번째 행렬(또는 벡터)의 행 수가 일치해야 합니다. 그러므로:
이 조건을 만족해야 행렬 곱셈이 가능합니다. 이때 1차원 배열이 뒤에 위치하더라도 이는 벡터로 취급되어 행렬 곱셈이 성립합니다.
import numpy as np
# 2차원 배열 (2x3)
A = np.array([[1, 2, 3],
[4, 5, 6]])
# 1차원 배열 (크기 3)
b = np.array([7, 8, 9])
# 행렬 곱셈 (2x3) @ (3,) -> 결과는 1차원 배열 (2,)
result = np.matmul(A, b)
print(result)
[ 50 122]
$$ A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}, \quad b = \begin{bmatrix} 7 \\ 8 \\ 9 \end{bmatrix} $$
$$ A \times b = \begin{bmatrix} 1 \times 7 + 2 \times 8 + 3 \times 9 \\ 4 \times 7 + 5 \times 8 + 6 \times 9 \end{bmatrix} = \begin{bmatrix} 50 \\ 122 \end{bmatrix} $$
1차원 배열은 사실상 벡터로 처리되며, 곱셈의 규칙에 따라 연산이 이루어집니다. 2차원 배열의 각 행과 1차원 배열(벡터) 사이의 내적이 이루어져 결과가 생성됩니다.