这更多的是一个设计问题。我参与了一个项目,这个项目需要我们解决一阶微分方程。我知道python有相应的模块,我们一直在使用这些函数。
但是,我们需要积分器速度快,因此我们希望使用自适应步长,并测试scipy包中未包含的其他一些例程。为此,我提出了一个f2py问题,因为用fortran或C编写ODE解算器并使用f2py包装它似乎是有意义的。例如,在fortran和python之间的接口中,“减速”发生在哪里?它是在来回转移内存吗?我想知道在前端我需要考虑什么。当然,我可以直接用python编写(对于初学者来说),但我听说在python中循环非常慢。
无论如何,我只是在寻找一般性的建议和需要考虑的事情。
谢谢。
发布于 2015-11-30 09:49:45
我对f2py不熟悉,但你有没有考虑过先试试Cython?如果您不熟悉它,它允许您用标准Python语言的超集编写代码,然后将其转换为C代码,然后编译。如果您的代码主要是循环,这可能会大大提高它的速度。但是请记住,无论何时从Cython内(或从普通C代码中)调用纯Python函数,都会造成瓶颈。(我相信这就是你所说的减速。)
也就是说,我最近丢弃了我编写的一个Cython模块,并将其替换为一个使用Python/C API的手写C++库。这是更好的,因为它让我更多地控制C++代码与NumPy的交互,这在Cython语言中有点挑战性。
https://stackoverflow.com/questions/33988654
复制相似问题