Хранение весов, используемых scipy griddata для повторного использования

Я пытаюсь интерполировать данные из неструктурированной сетки M1 в другую неструктурированную сетку M2. За это, scipy.interpolate.griddata выглядит неплохо.

Однако мне нужно будет много раз интерполировать от M1 до M2, меняя только данные, а не сетки. Я думаю, что внутренне scipy.interpolate.griddata определяет некоторые весовые коэффициенты при интерполяции от M1 до M2 и что это может быть одной из дорогих частей вычисления.

Поэтому я хотел бы избежать пересчета этих весов каждый раз. Есть ли способ сделать это? То есть, много раз интерполируя из одной неструктурированной сетки в другую неструктурированную сетку, обе сохраняли постоянными, избегая повторного вычисления внутренних scipy.interpolate.griddata (или эквивалент)?

1 ответ

Решение

Решение состоит в том, чтобы использовать LinearNDInterpolator Функция Сципи с предварительно вычисленной триангуляцией Делоне:

from scipy.spatial import Delaunay
from scipy.interpolate import LinearNDInterpolator

tri = Delaunay(mesh1)  # Compute the triangulation

# Perform the interpolation with the given values:
interpolator = LinearNDInterpolator(tri, values_mesh1)
values_mesh2 = interpolator(mesh2)

mesh1 массив (количество точек * тусклый)

Замечания: CloughTocher2DInterpolator может быть использован для нелинейной интерполяции. griddata использует либо LinearNDInterpolator или же CloughTocher2DInterpolator,

Другие вопросы по тегам