여기에서 볼 수 있듯이 두 벡터의 점곱은 스칼라가 되므로 원소 개수가 같은 벡터끼리 점곱이 가능합니다.
행렬 x와 벡터 y 사이에서도 점곱이 가능합니다. y와 x의 행 사이에서 점곱이 일어나므로 벡터가 반환됩니다. 다음과 같이 구현할 수 있습니다.
def naive_matrix_vector_dot( , ): assert len(x.shape) == 2 ➊ assert len(y.shape) == 1 ➋ assert x.shape[1] == y.shape[0] ➌ z = np.zeros(x.shape[0]) ➍ for i in range(x.shape[0]): for j in range(x.shape[1]): z[i] += x[i, j] * y[j] return z
➊ x는 넘파이 행렬입니다.
➋ y는 넘파이 벡터입니다.
➌ x의 두 번째 차원이 y의 첫 번째 차원과 같아야 합니다!
➍ 이 연산은 x의 행과 같은 크기의 0이 채워진 벡터를 만듭니다.
행렬-벡터 점곱과 벡터-벡터 점곱 사이의 관계를 부각하기 위해 앞에서 만든 함수를 재사용해 보겠습니다.
def naive_matrix_vector_dot( , ): z = np.zeros(x.shape[0]) for i in range(x.shape[0]): z[i] = naive_vector_dot(x[i, :], y) return z