Scipy 稀疏矩阵乘法
Scipy sparse matrix multiplication
我有这个使用 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_matrix
的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
不是"matrix multiplication"。如果您认为是,那么您可能会犯错误。要获得矩阵乘法,请使用矩阵 class,例如 numpy 的 matrix
或 scipy.sparse 矩阵 classes.
你失败的原因是从矩阵的角度来看 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 数组的矩阵乘法示例:
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_matrix
的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
不是"matrix multiplication"。如果您认为是,那么您可能会犯错误。要获得矩阵乘法,请使用矩阵 class,例如 numpy 的 matrix
或 scipy.sparse 矩阵 classes.
你失败的原因是从矩阵的角度来看 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]])