Scipy为矩阵乘法给出了错误的结果

时间:2018-10-19 07:07:08

标签: python numpy matrix scipy matrix-multiplication

我正在使用scipy进行稀疏矩阵的矩阵乘法。由于某些原因,.power()方法不适用于稀疏矩阵。我已经使用三种方法对其进行了检查:

这是我的代码:

import scipy as sp
import scipy.sparse 

方法1:普通矩阵乘法

row = np.array([0, 3, 1, 0])
col = np.array([0, 3, 1, 2])
data = np.array([4, 5, 7, 9])
P1 = sp.sparse.coo_matrix((data, (row, col)), shape=(4, 4))
#Method 1
P1.power(4).todense() #gives wrong result

结果:

matrix([[ 256,    0, 6561,    0],  #6561 isn't right
        [   0, 2401,    0,    0],
        [   0,    0,    0,    0],
        [   0,    0,    0,  625]], dtype=int32)

方法2:

P = P1.copy()
#calculate ^4
for loop in range(2):
    P = P.dot(P)
P.todense()

输出

matrix([[ 256,    0,  576,    0],
        [   0, 2401,    0,    0],
        [   0,    0,    0,    0],
        [   0,    0,    0,  625]], dtype=int32)

方法3

P1.dot(P1).dot(P1).dot(P1).todense()

输出:

matrix([[ 256,    0,  576,    0],
        [   0, 2401,    0,    0],
        [   0,    0,    0,    0],
        [   0,    0,    0,  625]], dtype=int32)

方法4:

一个人可以在this website (symbolab.com)

上查看结果

enter image description here

有关该主题的其他主题(Element-wise power of scipy.sparse matrixMatrix power for sparse matrix in python)着重于如何进行矩阵乘法。我将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以使用**表示法:

(P1**4).todense()

结果:

[[ 256    0  576    0]
 [   0 2401    0    0]
 [   0    0    0    0]
 [   0    0    0  625]]

编辑:关于.power()为什么不返回预期结果的原因:

-Zinki在其comment中提到:

  

p.power(2)是“元素智能”。 9**4 = 6561