我在求一个稀疏矩阵的矩阵指数:
import numpy as np
b = np.array([[1, 0, 1, 0, 1, 0, 1, 1, 1, 0],
[1, 0, 0, 0, 1, 1, 0, 1, 1, 0],
[0, 1, 1, 0, 1, 1, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 1, 1, 1, 0, 0],
[1, 1, 0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 1, 0, 0, 1, 0, 0, 1, 1],
[0, 0, 1, 0, 1, 0, 1, 1, 0, 0],
[1, 0, 0, 0, 1, 1, 0, 0, 1, 1],
[0, 0, 0, 0, 1, 0, 1, 1, 1, 0],
[0, 0, 0, 1, 0, 1, 1, 0, 0, 1]])
我可以使用scipy.linalg.expm
来计算,但是对于较大的矩阵来说速度很慢。
from scipy.linalg import expm
S1 = expm(b)
由于这是一个稀疏矩阵,我尝试将b
转换为scipy.sparse
矩阵,并对转换后的稀疏矩阵调用该函数:
import scipy.sparse as sp
import numpy as np
sp_b = sp.csr_matrix(b)
S1 = expm(sp_b);
但我得到了以下错误:
loop of ufunc does not support argument 0 of type csr_matrix which has no callable exp method
如何计算稀疏矩阵的矩阵指数?
1条答案
按热度按时间mcvgt66p1#
对于稀疏矩阵,需要使用
scipy.sparse.linalg.expm
,而不是scipy.linalg.expm
。注意:正如您所发现的,将矩阵定义为CSR matrix会发出警告 “SparseEfficiencyWarning:spsolve在sparse B采用CSC矩阵格式”“时效率更高。要消除这种情况,可以按照警告的建议进行操作,并定义一个CSC matrix(如果这对您的应用程序有意义的话):