Использовать scipy.integrate.quad из инструкции cdef в Cython? - PullRequest
2 голосов
/ 26 июля 2011

Я пытаюсь ускорить мой Python, переведя его на Cython. Он использует функцию scipy.integrate.quad, которая требует вызываемого Python в качестве одного из аргументов. Есть ли способ определить и передать функцию из инструкции cdef в Cython, чтобы я мог использовать это?

Спасибо.

1 Ответ

3 голосов
/ 09 августа 2011

Да, вам нужно просто обернуть функцию функцией python.

def py_callback(a):
   return c_callback(a)

cdef float c_callback(float a):
   return a * a

...
scipy.integrate.quad(py_callback)

Конечно, есть небольшая перегрузка преобразования.Альтернатива - посмотреть, как реализована эта функция.

  • Если это обертка для функции C, попробуйте напрямую вызвать функцию C из файла pyx (создавая pxd, который оборачивает scipy C-module).
  • Если это чистый Python, попытайтесь перевести его на cython.

В противном случае вам придется использовать другую функцию интеграции с чистым C и пропустить функцию scipy.

...