2016-06-10 4 views
2

ndarray, shape (m, n, n)의 W와 dimension (m, n)의 벡터 C가 있다고 가정합니다. 나는 어떻게 루프와 모든없이 벡터화 방법으로이 작업을 수행 할 다음과 같은 방법Numpy 3darray 행렬 곱셈 함수

result = np.empty(m,n) 
for i in range(m): 
    result[i] = W[i] @ C[i] 

에서이 두 가지를 곱해야합니까?

답변

1

np.tensordot 사용하는 것입니다 끝났다 과 같이, 매우 효율적인 접근 방식 np.einsum을 사용하는 것이 좋습니다 -

np.einsum('ijk,ik->ij',W,C)

np.tensordot 또는 np.dot에는 축 정렬을 유지하는 기능이 없으므로 np.einsum이 향상됩니다.

0

이 나는 ​​행렬 곱셈로에서 마지막 축을 잃어버린 동안, 당신은 정렬 된 두 WC에서 첫 번째 축을 유지할 필요가 있기 때문에

ans=np.tensordot(W,C,axes=[2,1])[np.arange(m),:,np.arange(m)] 
assert np.all(result==ans)