Python 稀疏矩阵乘法
我有一个使用numpy数组的逐矩阵乘法示例:Python 稀疏矩阵乘法,python,numpy,matrix,scipy,sparse-matrix,Python,Numpy,Matrix,Scipy,Sparse Matrix,我有一个使用numpy数组的逐矩阵乘法示例: 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
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)
您可以调用
csr\u矩阵的multiply
方法来执行逐点乘法
sparse.csr_matrix(m).multiply(sparse.csr_matrix(c)).todense()
# matrix([[ 0, 2, 6],
# [ 0, 5, 12],
# [ 0, 8, 18]], dtype=int64)
当m
和c
是numpy数组时,m*c
不是“矩阵乘法”。如果你认为是这样,那么你可能是在犯错误。要获得矩阵乘法,请使用矩阵类,如numpy的matrix
或scipy.sparse矩阵类
出现故障的原因是,从矩阵的角度来看,c
是一个1x3矩阵:
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]])
*
乘法是带数组的逐元素乘法,但矩阵乘积是带稀疏矩阵的。谢谢您的回答!美好的此外,如果您希望在末尾使用numpy数组,可以使用.toarray()
。我以前在使用.todense()
时被烧坏过,它给出了一个numpy矩阵
。