2011-09-18 7 views
3

길이가 같지만 너비가 하나 인 배열로 작업 할 때 성가신 모양이 일치하지 않는 문제가 발생했습니다. 예를 들어파이썬에서 배열 곱하기/나눗셈을위한 변형

import numpy as np 
x = np.ones(80) 
y = np.ones([80, 100]) 
x*y 

ValueError: shape mismatch: objects cannot be broadcast to a single shape 

단순 용액의 Y *의 x.reshape (x.shape [0], 1)이다. 그러나 종종 배열의 한 열을 부분 집합 화 한 다음이 변형을 지정해야합니다. 이것을 피할 수있는 방법이 있습니까?

(x * y.T).T 

또는

x.reshape((-1,1)) * y 

NumPy와의 broadcasting은 매우 강력한 기능입니다, 당신은 자동으로 원하는 것을 정확히 할 것입니다,하지만 마지막 축 기대 (또는 :

답변

5

두 다소 쉬운 방법은 축)을 배열의 첫 번째 축이 아닌 같은 모양으로 만듭니다. 따라서 작동하려면 y을 조 변경해야합니다.

두 번째 옵션은 수행중인 작업과 동일하지만 -1은 배열의 크기를 나타내는 자리 표시 자로 취급되므로 일부 입력이 줄어 듭니다.

+0

설명해 주셔서 감사합니다. – mike

+1

x.reshape ((- 1, 1))의 대안은 x [:, np.newaxis]입니다. 수식 내에서 더 읽기 쉽습니다. – donkopotamus

4

선호있어서 그것이 매우 판독 가능하고 효율적인

x[:, numpy.newaxis] * y 

이며,는 "newaxis"를 사용하는 것이다.