Могу ли я скомпилировать функцию Scipy в cython?

#python #scipy #cython

Вопрос:

Я интерполирую 6-мерную сетку данных, используя «scipy.интерполяция».RegularGridInterpolator’, но работа довольно медленная для сеток более высокой размерности:

Испытание на скорость

RegularGridInterpolator Уже скомпилирован в оптимизированный код на языке Си? Увижу ли я улучшение скорости, если создам свой собственный 6-мерный интерполятор цитонов?

Мне нужно использовать функцию интерполяции порядка миллионов, до миллиардов раз, чтобы любое ускорение имело огромное значение

РЕДАКТИРОВАТЬ: Я обнаружил, что если я просто интерполирую обычный сетчатый интерполятор до мелкой сетки, а затем использую ближайший N-мерный интерполятор, то произойдет значительное ускорение, которое не зависит от размера сетки:

Пунктирная линия-RGI, сплошная линия-NNDI

NNDI против RGI

Комментарии:

1. RegularGridInterpolator реализован на чистом Python в SciPy. Он запускает цикл Python for по количеству предоставленных вами точек (измерений), поэтому он замедляется с увеличением числа точек. Я не уверен, легко ли ускорить использование Cython. Вычисления, необходимые в цикле for, довольно велики. Хотя, если вы вызываете интерполятор миллионы раз, было бы неплохо попробовать переопределить его в Cython.