python的速度问题_如何提高Python中odeint的速度?

博主在解决大规模(约10^6)耦合常微分方程(ODE)时遇到性能问题,发现大部分时间odeint内部在进行其他操作而非评估右手边函数。主要耗时在odeint本身、矩阵乘法和重复操作。随着方程数量增加,性能下降显著。寻求提高效率的建议。
摘要由CSDN通过智能技术生成

我正在使用scipy包中的

Python和odeint来解决大量(~10e6)耦合的ODE.方程组可以表示为一些矩阵乘法的总和,我使用numpy和blas支持.我的问题是这需要很长时间.当我分析代码时,我发现大多数时候进入odeint做其他事情而不是评估rhs.这是来自探查器的五个最耗时的调用:

ncalls tottime percall cumtime percall filename:lineno(function)

5 1547.915 309.583 1588.170 317.634 {scipy.integrate._odepack.odeint}

60597 11.535 0.000 23.751 0.000 terms3D.py:5(two_body_evolution)

121194 11.242 0.000 11.242 0.000 {numpy.core._dotblas.dot}

60597 10.145 0.000 15.460 0.000 generator.py:13(Gs2)

121203 3.615 0.000 3.615 0.000 {method 'repeat' of 'numpy.ndarray' objects}

rhs基本上由two_body_evolution和Gs2组成.这个配置文件适用于~7000耦合的ODE,这对于~4000是相同的:

ncalls tottime percall cumtime percall filename:lineno(function)

5 259.427 51.885 273.316 54.663 {scipy.integrate._odepack.odeint}

30832 3.809 0.000 7.864 0.000 terms3D.py:5(two_body_evolution)

61664 3.650 0.000 3.650 0.000 {numpy.core._dotblas.dot}

30832 3.464 0.000 5.637 0.000 generator.py:13(Gs2)

61673 1.280 0.000 1.280 0.000 {method 'repeat' of 'numpy.ndarray' objects}

所以我的主要问题是odeint中的“隐藏”时间与方程的数量可怕地成比例.您对此有何想法以及如何提高性能?

感谢您的时间

奥斯卡Åkerlund

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值