2015-04-15 3 views
1

У меня небольшие проблемы, чтобы понять, как реализовать кубическую интерполяцию на сетке. У меня есть 25 значений величин, хранящихся в 1D массиве. Каждое значение представляет собой число внутри ячейки. Таким образом, значения отображаются на изображении 5x5 imshow, где каждая из 25 результирующих ячеек представляет мои сохраненные значения.Интерполяция на 2D-сетке python

Я успешно использовал встроенные параметры интерполяции на imshow, но я действительно хотел бы вернуть результат интерполяции.

data = 1D numpy array with 25 values 
imshow(data .reshape(5, 5), origin='upper', interpolation='lanczos', cmap=cm.jet) 

Я пытался идти с этой встроенной SciPy функции интерполяции, однако я не знаю, что это действительно лучший способ.

from scipy.interpolate import griddata 
grid_x, grid_y = np.mgrid[0:4:100j, 0:4:200j] 
grid_z2 = griddata(np.array([arange(5), arange(5)]).T, data, (grid_x, grid_y), method='cubic') 

Я получаю ValueError с различным количеством значений и точек. Если это не самый лучший способ, я могу использовать другие подходы.

Traceback (most recent call last): 
File "file.py", line 100, in <module> 
grid_z2 = griddata(np.array([arange(5), arange(5)]).T, data, (grid_x, grid_y), method='cubic') 
File "C:\Program Files\Anaconda\lib\site-packages\scipy\interpolate\ndgriddata.py", line 212, in griddata 
rescale=rescale) 
File "scipy\interpolate\interpnd.pyx", line 840, in scipy.interpolate.interpnd.CloughTocher2DInterpolator.__init__ (scipy\interpolate\interpnd.c:9953) 
File "scipy\interpolate\interpnd.pyx", line 78, in scipy.interpolate.interpnd.NDInterpolatorBase.__init__ (scipy\interpolate\interpnd.c:2342) 
File "scipy\interpolate\interpnd.pyx", line 121, in scipy.interpolate.interpnd.NDInterpolatorBase._check_init_shape (scipy\interpolate\interpnd.c:3085) 
ValueError: different number of values and points 
+0

пожалуйста, напишите полную ошибка отслеживающего –

+0

@Julien Spronck К сожалению об этом, отредактировано отражении вашего запроса. – dudas

+0

в traceback, вы видите 'square_mag [:, 2]' вместо 'data' ... ошибка может возникнуть оттуда, поскольку' square_mag [:, 2] 'не является массивом 5x5 –

ответ

0

Мне кажется, что мне удалось использовать интерполяцию.RectBivariateSpline для удовлетворения моих целей. Вот полный полный код:

from scipy import interpolate 

x = arange(5) 
y = arange(5) 
sp_x = interpolate.RectBivariateSpline(x, y, data) 

nx = linspace(0, 4, 50) 
ny = linspace(0, 4, 50) 
n_data = sp_x(nx, ny) 
Смежные вопросы