我试图反转一个大小为50,000 +行的密集矩阵。我一直在努力让SciPy GMRES操作起作用。对于一次迭代,似乎花费了过多的时间。我输入以下信息:
x_gm = scipy.sparse.linalg.gmres(A,b,tol=1e-08,maxiter=1)
其中A是一个类对象,它调用一个函数来计算矩阵向量乘积A * v。这使用Python Multiprocessing Pool命令快速计算矩阵向量积。对于我感兴趣的矩阵,我已经将这个产品A * V定时了一个8核的多处理池,大约需要50秒。但是,运行上面的gmres命令进行一次迭代需要1370秒。我的印象是大部分计算时间是矩阵向量乘积。这似乎有点奇怪,我想知道这里是否还有其他事情发生。 gmres是否忽略1迭代命令并进行多次迭代?任何建议或信息将不胜感激。
我使用的Scipy版本是版本.0.9.0。
答案 0 :(得分:2)
maxiter
控制重启周期的数量,而不是点数产品。
点积的界限为restart*maxiter
,其中restart
的默认值为20.确实,20*50 s = 1000 s
,所以时间确实由矩阵向量积所支配。
您可以通过在m-v产品功能中添加print语句来自行找到它。