#python #scipy #cython
Вопрос:
Я интерполирую 6-мерную сетку данных, используя «scipy.интерполяция».RegularGridInterpolator’, но работа довольно медленная для сеток более высокой размерности:
RegularGridInterpolator
Уже скомпилирован в оптимизированный код на языке Си? Увижу ли я улучшение скорости, если создам свой собственный 6-мерный интерполятор цитонов?
Мне нужно использовать функцию интерполяции порядка миллионов, до миллиардов раз, чтобы любое ускорение имело огромное значение
РЕДАКТИРОВАТЬ: Я обнаружил, что если я просто интерполирую обычный сетчатый интерполятор до мелкой сетки, а затем использую ближайший N-мерный интерполятор, то произойдет значительное ускорение, которое не зависит от размера сетки:
Пунктирная линия-RGI, сплошная линия-NNDI
Комментарии:
1.
RegularGridInterpolator
реализован на чистом Python в SciPy. Он запускает цикл Python for по количеству предоставленных вами точек (измерений), поэтому он замедляется с увеличением числа точек. Я не уверен, легко ли ускорить использование Cython. Вычисления, необходимые в цикле for, довольно велики. Хотя, если вы вызываете интерполятор миллионы раз, было бы неплохо попробовать переопределить его в Cython.