2017-03-01 3 views
2

내가 행렬 곱셈에 의한 행렬의 예 NumPy와 배열을 사용하여이 : m가 scipy 스파 스 CSR 행렬 인 경우 내가 같은 일을 할 수있는 방법Scipy 희소 행렬 곱셈

import numpy as np 
m = np.array([[1,2,3],[4,5,6],[7,8,9]]) 
c = np.array([0,1,2]) 
m * c 
array([[ 0, 2, 6], 
     [ 0, 5, 12], 
     [ 0, 8, 18]]) 

?

sp.sparse.csr_matrix(m)*sp.sparse.csr_matrix(c) 
+0

'* '곱셈은 배열을 갖는 요소별로, 그러나 희소 행렬을 갖는 행렬 곱입니다. – hpaulj

답변

3

당신은 점별 곱셈을 할 수 csr_matrixmultiply 메서드를 호출 할 수 있습니다 :이 차원 불일치를 제공합니다.

sparse.csr_matrix(m).multiply(sparse.csr_matrix(c)).todense() 

# matrix([[ 0, 2, 6], 
#   [ 0, 5, 12], 
#   [ 0, 8, 18]], dtype=int64) 
+0

답변 해 주셔서 감사합니다. –

0

mc 다음 m * c "는 행렬 곱셈"아니다 NumPy와 배열한다. 당신이 생각하는 경우에 당신은 실수하고 있을지도 모른다. 행렬 곱셈을 얻으려면 numpy의 matrix 또는 scipy.sparse 행렬 클래스와 같은 행렬 클래스를 사용하십시오.

당신이 실패를 얻고있는 이유는보기 c의 행렬 지점에서 1 × 3 행렬이다 :

당신이 원하는 것은 c은 다음 트랜스를 사용할 필요로 행렬 곱셈 인 경우
c = np.matrix([0, 1, 2]) 
c.shape # (1,3) 

c = sp.csc_matrix([0, 1, 2]) 
c.shape # (1,3) 

.

c = np.matrix([0, 1, 2]).transpose() 
c.shape # (3,1) 

m = np.matrix([[1,2,3],[4,5,6],[7,8,9]]) 
m.shape # (3,3) 

m * c 
# matrix([[ 8], 
#   [17], 
#   [26]])