더북(TheBook)

여기에서 볼 수 있듯이 두 벡터의 점곱은 스칼라가 되므로 원소 개수가 같은 벡터끼리 점곱이 가능합니다.

행렬 x와 벡터 y 사이에서도 점곱이 가능합니다. yx의 행 사이에서 점곱이 일어나므로 벡터가 반환됩니다. 다음과 같이 구현할 수 있습니다.

def naive_matrix_vector_dot(x, y):
    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(x, y):
    z = np.zeros(x.shape[0])
    for i in range(x.shape[0]):
        z[i] = naive_vector_dot(x[i, :], y)
    return z
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.