我正在使用Python,Numpy和Scipy包进行矩阵计算 . 我试图执行计算 X.transpose() * W * X
,其中X是2x3密集矩阵,W是稀疏对角矩阵 . (下面非常简化的例子)
import numpy
import scipy.sparse as sp
X = numpy.array([[1, 1, 1],[2, 2, 2]])
W = sp.spdiags([1, 2], [0], 2, 2).tocsr()
我需要找到密集矩阵X.transpose和稀疏矩阵W的乘积 .
我知道scipy中的一种方法不接受右侧的稀疏矩阵 .
>>> sp.csr_matrix.dot(X.transpose(), W)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unbound method dot() must be called with csr_matrix instance as first argument (got ndarray instance instead)
有没有办法将稀疏和密集矩阵相乘,其中稀疏矩阵是scipy右边的术语?如果没有,在没有将W变成密集矩阵的情况下,最好的方法是什么?
1 回答
矩阵乘法是关联的,因此您始终可以先计算
W * X
:如果你真的需要计算
X.T * W
,第一个密集,第二个稀疏,你可以让稀疏矩阵__mul__
方法为你处理它:实际上,对于您的用例,如果您使用
np.matrix
而不是np.array
,您的特定操作会变得非常简洁: