Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 稀疏矩阵乘法_Python_Numpy_Matrix_Scipy_Sparse Matrix - Fatal编程技术网

Python 稀疏矩阵乘法

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

我有一个使用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_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
矩阵