더북(TheBook)

두 텐서 중 하나라도 ndim이 1보다 크면 dot 연산에 교환 법칙이 성립되지 않습니다. 다시 말하면 dot(x, y)dot(y, x)가 같지 않습니다.21

물론 점곱은 임의의 축 개수를 가진 텐서에 일반화됩니다. 가장 일반적인 용도는 두 행렬 간의 점곱일 것입니다. x.shape[1] == y.shape[0]일 때 두 행렬 xy의 점곱(dot(x, y))이 성립됩니다. x의 행과 y의 열 사이 벡터 점곱으로 인해 (x.shape[0], y.shape[1]) 크기의 행렬이 됩니다. 다음은 단순한 구현 예입니다.

def naive_matrix_dot(x, y):
    assert len(x.shape) == 2 
    assert len(y.shape) == 2 
    assert x.shape[1] == y.shape[0] 
    z = np.zeros((x.shape[0], y.shape[1])) 
    for i in range(x.shape[0]): 
        for j in range(y.shape[1]): 
            row_x = x[i, :]
            column_y = y[:, j]
            z[i, j] = naive_vector_dot(row_x, column_y)
    return z

x와 y는 넘파이 벡터입니다.

x의 두 번째 차원이 y의 첫 번째 차원과 같아야 합니다!

이 연산은 0이 채워진 특정 크기의 벡터를 만듭니다.

x의 행을 반복합니다.

y의 열을 반복합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.