我试图用Cython加速偏微分方程的有限差分积分器。我不知道我需要做什么才能让Cython正确地使用numpy数组。在
我使用的扩散项函数是
def laplacian(var, dh2):
""" (1D array, dx^2) -> laplacian(1D array)
periodic_laplacian_1D_4th_order
Implementing the 4th order 1D laplacian with periodic condition
"""
lap = numpy.zeros_like(var)
lap[1:] = (4.0/3.0)*var[:-1]
lap[0] = (4.0/3.0)*var[1]
lap[:-1] += (4.0/3.0)*var[1:]
lap[-1] += (4.0/3.0)*var[0]
lap += (-5.0/2.0)*var
lap[2:] += (-1.0/12.0)*var[:-2]
lap[:2] += (-1.0/12.0)*var[-2:]
lap[:-2] += (-1.0/12.0)*var[2:]
lap[-2:] += (-1.0/12.0)*var[:2]
return lap / dh2
模型方程的rhs为
^{2}$如何使用Cython优化这些函数?在
我在Github上有一个用于我的工作代码的存储库,它集成了Gray-Scott模型-Gray-Scott model integrator。在
所以我想我已经想好了,虽然我不确定这是最好的方法:
我用了以下方法设置.py在
^{pr2}$欢迎提出任何改进建议。。在
要有效地使用Cython,应该使所有循环显式化,并确保
cython -a
显示尽可能少的Python调用。第一次尝试是:现在你可以:
^{pr2}$而纽比密码给出了:
注意,Cython可以通过合并循环等进一步优化
我还尝试了Pythran的自定义(即未在主版本中提交),并且在不更改原始Python代码的情况下,我获得了与Cython版本相同的加速,而无需转换代码:
转换为:
我得到:
相关问题 更多 >
编程相关推荐