2013-08-15 3 views
5

행렬 곱셈에서 A은 3x2 행렬 (3 행, 2 열)이고 B은 2x4 행렬 (2 행, 4 열)이고, 행렬 C = A * B 인 경우, C은 3 행 4 열을 가져야합니다. 왜 numpy는이 곱셈을하지 않습니까? ValueError: operands could not be broadcast together with shapes (3,2) (2,4)numpy 행렬 곱셈 형태

a = np.ones((3,2)) 
b = np.ones((2,4)) 
print a*b 

나는 같은 대답을 얻을 alwasy을 전치하고 B와 함께 시도 : 나는 다음과 같은 코드를하려고하면 오류가 발생합니다. 왜? 이 경우 행렬 곱셈을 어떻게 수행합니까?

답변

15

numpy 배열에 대한 * 연산자는 행렬 곱셈이 아니라 요소 차원의 곱셈 (동일한 차원의 배열에 대한하다 마드 곱셈과 유사 함)입니다. 예를 들어

:

NumPy와 배열을 곱 행렬
>>> a 
array([[0], 
     [1], 
     [2]]) 
>>> b 
array([0, 1, 2]) 
>>> a*b 
array([[0, 0, 0], 
     [0, 1, 2], 
     [0, 2, 4]]) 

: 방송 NumPy와 배열에

>>> a=np.matrix(np.ones((3,2))) 
>>> b=np.matrix(np.ones((2,4))) 
>>> a*b 
matrix([[ 2., 2., 2., 2.], 
     [ 2., 2., 2., 2.], 
     [ 2., 2., 2., 2.]]) 

더 많은 정보 : 당신은 매트릭스 클래스를 사용할 수 있습니다

>>> a = np.ones((3,2)) 
>>> b = np.ones((2,4)) 
>>> np.dot(a,b) 
array([[ 2., 2., 2., 2.], 
     [ 2., 2., 2., 2.], 
     [ 2., 2., 2., 2.]]) 

을 또한 here을 찾을 수 있으며 매트릭스 클래스에 대한 자세한 정보는을 참조하십시오..

+0

"LinearOperator"클래스를 정의하는 sparse.linalg numpy 확장자에주의해야합니다. 이 클래스에서 "*"연산자는 일반적인 행렬 곱으로 해석됩니다. – Guillaume

+0

numpy 행렬 대 배열을 사용해야하는 경우는 언제입니까? 최근까지도 매트릭스 API가 있다는 것을 알지 못했습니다. –

+0

@CharlieParker 매트릭스를 사용하지 않는 것이 좋습니다. 사용하지 않을 예정입니다. – Daniel