2016-12-15 15 views
2

의 최대와 내적 (이에 대한 일반적인 수학적 용어가 또는이다) 다음을 수행 할 수 NumPy와의 방법이 있나요 당신이 완전히 위의 평행 볼 수 있듯이NumPy와 :</p> <pre><code>M3[i,k] = sum_j(M1[i,j] * M2[j,k]) </code></pre> <p>:</p> <p>정상 내적을 가정 : 대신 합

M3[i,k] = max_j(M1[i,j] * M2[j,k]) 

, 단지 우리가 모든 j 이상 max을 : 지금은 합계 다른 조작에 의한 합을 대체하고자하는 최대 말 그리고 합계가 아닙니다.

기타 옵션은 min, prod 및 시퀀스/세트를 값으로 바꾸는 다른 작업이 될 수 있습니다.

+0

: 일반화 이런 종류의 특별한 수학적 용어가 있는지 아는 사람 있나요? 아마도 문제는 최적화 측면에서 연구되었습니다 ... –

+1

'dot'은'sum of products' 연산입니다. 사용자가 두 작업을 모두 지정할 수있게 해주는'np.einsum'의 일반화에 대한'issue' 요청이 있습니다. Iverson의 APL에서는 내부 제품이 A + .x B로 쓰여지고 다른 연산자는'+'및'x '대신 사용될 수 있습니다. – hpaulj

답변

4

일반 도트 제품은

M3 = np.sum(M1[:, :, None] * M2[None, :, :], axis = 1)

당신은 당신이이 axis 키워드가 원하는 기능과 같은 일을 할 수 (NumPy와 방송 사용) 것입니다. 호기심에서

M3 = np.max(M1[:, :, None] * M2[None, :, :], axis = 1)

+0

또는 단순히 : np.max (M1 [..., None] * M2, axis = 1)'등등. – Divakar

+0

코드의 첫 번째 줄은'np.dot (M1, M2)'보다 훨씬 느린가요? –

+1

@RadioControlled'np.dot'는 특별한 경우이고 AFAIK는 요소 단위로 곱셈과 덧셈을하지 않기 때문에'np.dot'가 훨씬 빠릅니다. – Divakar