Я пытаюсь ускорить интегратор конечных разностей для уравнения в частных производных, используя 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
А правые части уравнений модели равны
from derivatives import laplacian
def dbdt(b,w,p,m,d,dx2):
""" db/dt of Modified Klausmeier """
return w*b**2 - m*b + laplacian(b,dx2)
def dwdt(b,w,p,m,d,dx2):
""" dw/dt of Modified Klausmeier """
return p - w - w*b**2 + d*laplacian(b,dx2)
Как я могу оптимизировать эти функции с помощью Cython?
У меня есть репозиторий на Github для моего рабочего кода, который интегрирует модель Грея-Скотта — интегратор моделей Грея-Скотта.
cython
. - person hpaulj   schedule 10.09.2015