Scipy griddata с «линейным» и «кубическим» выходом nan - PullRequest
0 голосов
/ 12 июня 2018

следующий код должен производить griddata.Но в случае, если я выбрал тип интерполяции «кубический» или «линейный», я получаю наны в сетке z.Когда я выбираю «ближайший», все работает нормально.Вот пример кода:

import numpy as np
from scipy.interpolate import griddata

x = np.array([0.03,0.05,0033])
y = np.array([0.004,0.01,0.02])
z = np.array([1,2,3])


xy = np.zeros((2,np.size(x)))
xy[0] = x
xy[1] = y
xy = xy.T

grid_x, grid_y = np.mgrid[0.0:0.09:250*1j, 0.0:0.03:250*1j] #generating the grid


i_type= 'cubic' #nearest, linear, cubic
grid_z = griddata(xy, z, (grid_x, grid_y), method=i_type)

#check if there is a nan in the z grid:
print np.isnan(grid_z).any()

Я понятия не имею, почему это не работает ..

1 Ответ

0 голосов
/ 12 июня 2018

Ваша область, на которую вы смотрите, просто намного больше, чем ваши точки ввода.Это не имеет значения для «ближайшего», так как это всегда ставит ближайшее значение к определенной координате.Но 'linear' и 'cubic' не экстраполируют, а заполняют значения, которые по умолчанию находятся за пределами области ввода, с помощью nan.

См. Также документы griddata:

fill_value : float, optional
Value used to fill in for requested points outside of the convex hull of the input points. If not provided, then the default is nan. This option has no effect for the ‘nearest’ method.

Лучше всего понять при построении по imshow:

enter image description here

участок, созданный с помощью:

import numpy as np
from scipy.interpolate import griddata

x = np.array([0.03,0.05,0.033])
y = np.array([0.004,0.01,0.02])
z = np.array([1,2,3])


xy = np.zeros((2,np.size(x)))
xy[0] = x
xy[1] = y
xy = xy.T

grid_x, grid_y = np.mgrid[0.0:0.09:250*1j, 0.0:0.03:250*1j] #generating the grid

fig, axs = plt.subplots(3)
for i, i_type in enumerate(['cubic', 'nearest', 'linear']): #, cubic
    grid_z = griddata(xy, z, (grid_x, grid_y), method=i_type)

    #check if there is a nan in the z grid:
    axs[i].imshow(grid_z)
    axs[i].set_title(i_type)

plt.tight_layout()
...