2017-03-01 294 views
2

我有矩陣乘法使用numpy的陣列矩陣的這個例子: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]]) 

我如何可以做同樣的事情,如果m是SciPy的稀疏矩陣CSR?這使尺寸不匹配:

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

m時和c是numpy的陣列,然後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]])