作为用于数值计算的 python 代码的一部分,我必须多次反转较大(稀疏)矩阵(~100x100)。我真的很想加快程序的速度,向我建议的一种方法是调用 C 中的子程序来进行矩阵求逆步骤。
对于这项任务,是否有任何推荐的高效且经过良好测试的 C 例程?
谢谢你。
作为用于数值计算的 python 代码的一部分,我必须多次反转较大(稀疏)矩阵(~100x100)。我真的很想加快程序的速度,向我建议的一种方法是调用 C 中的子程序来进行矩阵求逆步骤。
对于这项任务,是否有任何推荐的高效且经过良好测试的 C 例程?
谢谢你。
>>> from numpy import *
>>> from numpy.linalg import inv
>>> from scipy.sparse import csr_matrix
>>> m = matrix([[3,1,5],[1,0,8],[2,1,4]])
>>> s = csr_matrix(m)
>>> invs = inv(a) # Inverse sparse matrix
>>> dot(a,inva) # Check the result, should be eye(3) within machine precision
csr_matrix([[ 1.00000000e-00, 2.77555756e-17, 3.60822483e-16],
[ 0.00000000e+00, 1.00000000e+00, 0.00000000e+00],
[ -1.11022302e-16, 0.00000000e+00, 1.00000000e+00]])
它真的是你需要的逆吗?您可以在不倒置的情况下实现您的目标:
真正需要逆向的情况很少见。此外,稀疏矩阵的逆不一定是稀疏的。通常,反转比 LU 分解更昂贵,并且容易出现舍入错误。
-- http://mail.scipy.org/pipermail/scipy-user/2007-October/013936.html