稠密矩形矩阵与稀疏矩阵相乘

2024-04-20 02:56:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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的乘积。转置和稀疏矩阵W的乘积

据我所知,scipy中的一个方法不接受右侧的稀疏矩阵。在

^{pr2}$

如果稀疏矩阵是scipy中右边的项,有没有一种方法可以乘以稀疏矩阵和稠密矩阵?如果没有,在不把W变成稠密矩阵的情况下,最好的方法是什么?在


Tags: 方法importnumpyas矩阵scipysp例子
1条回答
网友
1楼 · 发布于 2024-04-20 02:56:13

矩阵乘法是相联的,因此您总是可以首先计算W * X

>>> X.T.dot(W.dot(X))
array([[9, 9, 9],
       [9, 9, 9],
       [9, 9, 9]])

如果您真的要计算X.T * W,第一个密集,第二个稀疏,您可以让稀疏矩阵__mul__方法为您处理:

^{pr2}$

实际上,对于您的用例,如果您使用np.matrix而不是np.array,那么您的特定操作会变得异常整洁:

>>> Y = np.matrix(X)
>>> Y.T * W * Y
matrix([[9, 9, 9],
        [9, 9, 9],
        [9, 9, 9]])

相关问题 更多 >