python中稀疏矩阵的矩阵幂
我试图找到一种方法,对稀疏矩阵M:M^k=M*..*M k乘以矩阵幂,其中*是矩阵乘法(numpy.dot),而不是元素乘法 我知道如何对法线矩阵执行此操作: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执
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)