Как мне выполнить интерполяцию Python с 2D-данными? - PullRequest
1 голос
/ 18 июня 2020

Я новичок в Python, и у меня есть простой пример интерполяции, который я хотел бы решить с помощью 'interpn'.

x = np.linspace(0,1,4)
y = np.linspace(-1,1,5)

A = np.zeros((len(x), len(y)))

for i in range (1,len(x)):
    for j in range (1,len(y)):
        A[i,j] = np.sin(x[i] ** 2 + y[j] ** 2)

x1 = np.linspace(0,1,10)
y1 = np.linspace(-1,1,20)

xi,yi = np.meshgrid(x,y)
x1i,y1i = np.meshgrid(x1,y1)



int_A = interpn(xi,yi,A,x1i,y1i)

Для этого я получаю ошибку значения "interpn понимает только методы 'linear', 'ближайший' и 'splinef2d'". Итак, когда у меня есть все входные данные в виде 2D-массивов, как мне использовать функцию 'interpn' для интерполяции или любую другую функцию интерполяции Python в этом случае? Меня также интересует трехмерная интерполяция, когда все входные данные и значения функций представляют собой трехмерные массивы. Может кто-нибудь помочь мне с этими проблемами? Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Из scipy api:

scipy.interpolate.interpn(points, values, xi, method='linear', bounds_error=True, fill_value=nan)

points : tuple of ndarray of float, with shapes (m1, ), …, (mn, )
The points defining the regular grid in n dimensions.

values : array_like, shape (m1, …, mn, …)
The data on the regular grid in n dimensions.

xi : ndarray of shape (…, ndim)
The coordinates to sample the gridded data at

Я считаю, что вам нужно упаковать свои точки в кортежи. Попробуйте int_A = interpn((xi,yi),A,(x1i,y1i))

То же самое, когда вы делаете 3D, просто добавьте zi и z1i в кортежи.

0 голосов
/ 18 июня 2020

Вы смотрели https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html?

Это должно позволить вам вставить 2D-сетку в качестве входных данных.

...