我正在使用Numpy/Scipy来反转一个20k的矩阵,它很慢。我试过了:
(1) M_inv = M.I
(2) Ident = np.Identity(len(M))
M_inv = scipy.linalg.solve(M, Ident)
(3) M_inv = scipy.linglg.inv(M)
但没有看到任何加速。
还有其他方法可以加快速度吗?
这是一个很大的矩阵,反转它会很慢。一些选项:
- 使用链接到英特尔 MKL 的 numpy(例如 Enthought 发行版,或者您可以自己编译它),它应该比链接到标准 BLAS/ATLAS 的 numpy 更快。
- 如果矩阵足够稀疏,请使用
scipy.linalg.sparse
。(不过,如果只有几个零,这可能会更慢。 - 弄清楚你是否真的需要倒排矩阵的显式表示来做你想用它做的任何事情——通常你可以在不显式反转它的情况下逃脱,但很难说不知道你在用这个矩阵做什么。