У меня есть массив numpy, который выглядит так. Интерполяция массива numpy с максимальным расстоянием интерполяции
Я хочу интерполировать между точками данных, чтобы заполнить некоторые меньшие отверстия в данных. Скажем, в этом примере я хочу интерполировать максимум на 2 пикселя. Тогда я ожидал бы что-то похожее на это.
До сих пор я пытался несколько методов интерполяции, как:
from scipy.interpolate import LinearNDInterpolator
valid_mask = ~np.isnan(raw)
coords = np.array(np.nonzero(valid_mask)).T
values = raw[valid_mask]
it = LinearNDInterpolator(coords, values)
interpolated = it(list(np.ndindex(raw.shape))).reshape(raw.shape)
, которые приводят к результату.
Этот подход не сохраняет кластеры в данных, которые я мог бы легко преодолеть путем кластеризации заранее, а затем добавить результаты. Но что более важно, он интерполируется на больших расстояниях в кластерах, которые имеют форму вогнутой формы.
Может ли кто-нибудь указать мне метод интерполяции, который использовал какой-то порог расстояния?
Для тестирования я включил данные выборки, которые я использовал, чтобы объяснить мою проблему:
raw = np.array([[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 3., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 5., 4., 4., 4., 4., 4., 5.],
[ 0., 5., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 1., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.]])
raw[raw==0]=np.nan