2017-03-01 695 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]])