2017-03-01 14 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メソッドを呼び出すことができます。 mcがnumpyの配列で

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

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

ありがとうございました! –

0

、次いでm * c "は行列乗算" ではありません。もしそれがあなたが間違いをしているかもしれないと思うならば。行列の乗算を得るには、numpyのmatrixやscipy.sparseの行列クラスのような行列クラスを使用します。

あなたは失敗を取得している理由は、ビューcの行列ポイントから1×3行列であるということです。

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

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

何がしたいことはcと行列の乗算であれば、あなたは転置を使用する必要があります。

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]])