python中稀疏矩阵的矩阵幂

python中稀疏矩阵的矩阵幂,python,numpy,scipy,linear-algebra,sparse-matrix,Python,Numpy,Scipy,Linear Algebra,Sparse Matrix,我试图找到一种方法,对稀疏矩阵M:M^k=M*..*M k乘以矩阵幂,其中*是矩阵乘法(numpy.dot),而不是元素乘法 我知道如何对法线矩阵执行此操作: import numpy as np import scipy as sp N=100 k=3 M=(sp.sparse.spdiags(np.ones(N), 0, N, N)-sp.sparse.spdiags(np.ones(N), 2, N, N)).toarray() np.matrix_power(M,k) 我如何为稀疏M执

我试图找到一种方法,对稀疏矩阵M:M^k=M*..*M k乘以矩阵幂,其中*是矩阵乘法(numpy.dot),而不是元素乘法

我知道如何对法线矩阵执行此操作:

import numpy as np
import scipy as sp
N=100
k=3
M=(sp.sparse.spdiags(np.ones(N), 0, N, N)-sp.sparse.spdiags(np.ones(N), 2, N, N)).toarray()
np.matrix_power(M,k)
我如何为稀疏M执行此操作:

M=(sp.sparse.spdiags(np.ones(N), 0, N, N)-sp.sparse.spdiags(np.ones(N), 2, N, N))
当然,我可以通过递归乘法来实现这一点,但我想知道scipy中是否有类似稀疏矩阵的矩阵幂的功能。
非常感谢您的帮助。提前感谢。

对于numpy矩阵,您也可以使用
**
符号代替
矩阵\u幂

a=np.matrix([[1,2],[2,1]])
a**3
输出:


使用scipy稀疏矩阵进行尝试。

**
已为
csr\u矩阵
实现。有一个
\uuuu pow\uuu
方法

在处理一些特殊情况后,此
\uuuuu pow\uuuu
将:

            tmp = self.__pow__(other//2)
            if (other % 2):
                return self * tmp * tmp
            else:
                return tmp * tmp
对于稀疏矩阵,
*
是矩阵乘积(
dot
表示ndarray)。所以它在做递归乘法


正如
math
所指出的,
np.matrix
还实现了
**
\uuuuuuuu pow\uuuu
)作为矩阵幂。事实上,它最终调用了
np.linalg.matrix\u power

np.linalg.matrix\u power(M,n)
是用Python编写的,因此您可以很容易地看到它的功能


对于
,如果您有布尔稀疏矩阵并打算计算传递闭包(连通性),您可能需要查看一下:
            tmp = self.__pow__(other//2)
            if (other % 2):
                return self * tmp * tmp
            else:
                return tmp * tmp
result = np.dot(M,M)
result = np.dot(result,result)