在Python中计算大型复杂数组的指数[exp()]函数的最快方法

我正在开发使用scipy的complex_ode集成ODE的代码,其中被积函数包括傅立叶变换和作用于大量复杂值的指数运算符.

为了优化性能,我对此进行了分析,发现主要的瓶颈是(在使用PyFFTW优化FFT之后):

val = np.exp(float_value * arr)

我目前正在使用numpy,我理解调用C代码 – 因此应该很快.但有没有办法进一步提高性能呢?

我已经研究过使用Numba,但由于我的主循环也包含FFT,我认为它不能被编译(nopython = True flag导致错误)因此,我怀疑它没有提供任何收益.

这是我想要优化的代码的测试示例:

arr = np.random.rand(2**14) + 1j *np.random.rand(2**14)
float_value = 0.5
%timeit np.exp(float_value * arr)

任何建议都欢迎致谢.

解决方法:

我们可以利用numexpr module,它可以有效地处理涉及超越操作的大数据 –

In [91]: arr = np.random.rand(2**14) + 1j *np.random.rand(2**14)
    ...: float_value = 0.5
    ...: 

In [92]: %timeit np.exp(float_value * arr)
1000 loops, best of 3: 739 µs per loop

In [94]: import numexpr as ne

In [95]: %timeit ne.evaluate('exp(float_value*arr)')
1000 loops, best of 3: 241 µs per loop

这似乎与文件中所述的expected performance一致.

上一篇:用复杂矩阵作为初始值解决python中的ode问题


下一篇:python – 用SciPy数字解决ODE问题