用Python并行求解具有大量初始条件的ODE

用Python并行求解具有大量初始条件的ODE,python,arrays,numpy,scipy,ode,Python,Arrays,Numpy,Scipy,Ode,我试图使用scipy.integrate.ode或scipy.integrate.odeint来解决一个ode系统中的一大组(超过1000个)初始条件,但是执行循环非常慢,而且scipy似乎不提供输入2D数组的选项(由一组指定初始条件的1D数组堆叠而成),而scipy.integrate.solve_ivp的矢量化的选项似乎并不意味着它接受初始条件的2D数组()。 我读过一篇帖子,问了一个类似的问题(),其中一个答案建议使用scipy.integrate.odeint,但是它似乎也不接受多维数组

我试图使用
scipy.integrate.ode
scipy.integrate.odeint
来解决一个ode系统中的一大组(超过1000个)初始条件,但是执行循环非常慢,而且scipy似乎不提供输入2D数组的选项(由一组指定初始条件的1D数组堆叠而成),而
scipy.integrate.solve_ivp
矢量化的
选项似乎并不意味着它接受初始条件的2D数组()。

我读过一篇帖子,问了一个类似的问题(),其中一个答案建议使用
scipy.integrate.odeint
,但是它似乎也不接受多维数组,所以它根本不知道如何实现它。有什么解决方案可以加快这个过程吗?除了矢量化之外,我还考虑过使用并行计算技术,但我不熟悉这一点nd我认为它并没有真正像矢量化那样显著地加快程序的速度?

为什么2d初始条件是一种改进?ode函数是否尽可能快?这是您对计算速度控制最多的地方。对于大规模生产,scipy代码是相当次优的。使用绑定到日晷或DifferentrentialEquations.jl(存在一些重叠)要访问最新的和经过测试的实现,请使用JIT或直接为ODE函数使用编译语言。请注意,并行解决方案可能会影响单个解决方案的准确性,特别是当解决方案集合访问状态空间的不同部分时。您不需要2D数组函数:您可以制定ODE f使用1D数组输入函数,然后在函数代码的第一行重塑它。正如hpaulj所说,您可以通过使用ode函数来提高速度。您可以尝试的其他事情是:降低收敛标准或使用显式积分器,如
RK23
RK45
,以最小的步长,将雅可比矩阵传递给“并行计算”位,请参阅(假设不涉及跨线程通信)。不像可以接受多个初始值的单个函数调用那样方便,但可以选择多处理: