2013-03-20 2 views
4

나는 어제 wrong question을 요청한 것 같아요. 내가 실제로 원하는 것은,이 2x2xN 행렬 AB을 mutiply하는 것입니다 그래서 예를 들어numpy에서 3 차원 행렬의 곱

C[:,:,i] = dot(A[:,:,i], B[:,:,i]) 

즉, 내가

A = np.arange(12).reshape(2, 2, 3) 

가 어떻게 위에서 설명한 정의와 C = A x A 얻을 수있는 매트릭스가 있다면? 이 작업을 수행 할 수있는 내장 함수가 있습니까? 내가 A (shape 2x2xN)B (shape 2x2x1, instead of N)에 거는 경우


또한, 내가

C[:,:,i] = dot(A[:,:,i], B[:,:,1]) 

답변

2

numpy.einsum를 사용해보십시오 싶어, 그것은 학습 곡선의 조금을 가지고 있지만 그것은 당신이 원하는 무엇을 제공해야합니다. 다음은 시작하기위한 예제입니다.

import numpy as np 

A = np.random.random((2, 2, 3)) 
B = np.random.random((2, 2, 3)) 

C1 = np.empty((2, 2, 3)) 
for i in range(3): 
    C1[:, :, i] = np.dot(A[:, :, i], B[:, :, i]) 

C2 = np.einsum('ijn,jkn->ikn', A, B) 
np.allclose(C1, C2) 
+0

놀라운 소식입니다. 문제의 두 경우 모두에 적용됩니다. A와 B를 (두 번째 질문에서 다른 모양의) 교환 할 때도 작동합니다. – LWZ

+0

그리고 너무 빨라요! – LWZ

+2

+1 처음에는 'einsum'이 사용 된 것을 보았을 때 [마법과 구별 할 수없는] (http://en.wikipedia.org/wiki/Clarke's_three_laws) 풍미, 위대한 기능 및 초고속 성이있었습니다. – Jaime

관련 문제