Python:使用scipy.linalg.solve\u Toeplitz求解线性Toeplitz系统速度慢

Python:使用scipy.linalg.solve\u Toeplitz求解线性Toeplitz系统速度慢,python,performance,optimization,linear-algebra,toeplitz,Python,Performance,Optimization,Linear Algebra,Toeplitz,我试图在Python 3.6中有效地解决以下线性系统: b=A x 其中A是nxn-Toeplitz矩阵(即,从左到右的对角线是常数),x,b是nxn矩阵。在Scipy中实现的Durbin-Levinson作为Scipy.linalg.solveu-toeplitz应该能够利用A的结构有效地解决上述系统,事实上,当x,b是向量时,它会这样做 但是,当x,b是矩阵时,它比scipy.linalg.solve和numpy.linalg.solve都慢得多(请参见测试脚本的输出) 在我的应用程序中,执

我试图在Python 3.6中有效地解决以下线性系统:

b=A x

其中A是nxn-Toeplitz矩阵(即,从左到右的对角线是常数),x,b是nxn矩阵。在Scipy中实现的Durbin-Levinson作为Scipy.linalg.solveu-toeplitz应该能够利用A的结构有效地解决上述系统,事实上,当x,b是向量时,它会这样做

但是,当x,b是矩阵时,它比scipy.linalg.solve和numpy.linalg.solve都慢得多(请参见测试脚本的输出)

在我的应用程序中,执行时间至关重要。我可以选择哪些方法来加快流程,或者利用托普利茨结构

scipy.linalg.solve_toeplitz慢的一个可能解释是,它使用矩阵输入的慢for循环来求解x,b为向量的单个线性系统(一次求解每列)

脚本输出:

Method: numpy.linalg.solve(A, b) - error: 4.8794411236474704e-11
Method: scipy.linalg.solve(A, b) - error: 4.824494916488265e-11
Method: scipy.linalg.solve_toeplitz((c, r), b) - error: 2.7607739766053664e-08
Timings:
[0.08000469207763672, 0.03300189971923828, 0.6740384101867676]

文档:

使用
solve\u toeplitz
check\u finite=False
,这通常会产生很大的不同。什么是
N
?我相信脚本执行时
N=600
。不幸的是,设置
check_finite=False
的速度可以忽略不计。我正在试图弄清楚为什么原始版本的速度不能在我的笔记本电脑上运行,作为研究的一部分,这一速度差异可能是一种倒退,因为拉动请求的性能非常好。它看起来像是
solve\u toeplitz
calls,这是一个Pyrex(像Cython这样的老东西)的东西。你能用你的完整脚本编辑这个问题,作为Scipy开发人员的副本吗?我已经包括了完整的测试脚本。您有什么建议可以让我的代码运行得更快,最好使用Toeplitz结构?或者,除非我实现自己的Durbin-Levinson算法,否则我现在是不是运气不佳?谢谢你的快速回复。
Method: numpy.linalg.solve(A, b) - error: 4.8794411236474704e-11
Method: scipy.linalg.solve(A, b) - error: 4.824494916488265e-11
Method: scipy.linalg.solve_toeplitz((c, r), b) - error: 2.7607739766053664e-08
Timings:
[0.08000469207763672, 0.03300189971923828, 0.6740384101867676]