2013-05-15 4 views
2

행렬의 첫 번째 배열에 벡터의 첫 번째 값을 곱해야하는 등 행렬의 배열을 벡터로 곱하고 싶습니다. 벡터로 행렬의 행렬을 곱하십시오.

import numpy as np 

# Three matrices/double arrays            
a = np.array([[1,2], [3, 4]]) 
b = np.array([[2,3], [4, 5]]) 
c = np.array([[3,4], [5, 6]]) 

# An array of matrices              
d = np.array([a, b, c]) 

# A vector                 
e = np.array([1,2,3]) 

# Multiply every matrix by the corresponding value in the vector    
f = [ d[i] * e[i] for i in range(len(e)) ] 

# Somewhat to my surpise however, this doesn't work       
g = d * e # <-- Doesn't work 

# Nor does                 
h = e * d # <-- Doesn't work 

그래서 지능형리스트는 작동하지만, 그 일을하는 가장 효율적인 방법입니다 경우 어떻게 든 의심한다.

정말 간단한 것을 간과하고 있습니까?

답변

1

당신은 축 정렬해야합니다

f = d * e[:,np.newaxis,np.newaxis] 

d.shape 
(3, 2, 2) 
e.shape 
(3,) 
e[:,np.newaxis,np.newaxis].shape 
(3, 1, 1) 

대안은 다음 e (모양 (3)) 브로드 캐스트 - 것, d의 모양 (2,2,3)하게하는 것 d 님의 모양이 가능합니다.

정말로 원하는 것은 broadcasting에 대해 자세히 알아 보는 것입니다.

편집 : 인플레 이스 곱셈에 대한 두 번째 질문에 대한 같은

: 없음 복사본이 생성되지 않습니다

d *= e[:,np.newaxis,np.newaxis] 

.

+0

감사합니다. 그게 효과가있어! 하지만 ... 정확히 어떻게 ..?!? – Tom

+0

또한 모양이 어떻게 생겼는지, 행렬이 복사되는 느낌을 받는다.?!? D에서 비슷한 트릭을 할 수 있습니까? (저렴하다고 생각합니다.) \ – Tom

+0

. 내 편집 참조 – shx2

관련 문제