интерполяция массивов с несколькими измерениями в python с использованием scipy. - PullRequest
0 голосов
/ 06 января 2019

У меня есть 2 массива.

DEPTH = array([1945.0813, 1945.2337, 1945.3861, ..., 3089.7577, 
3089.9101,3090.0625])

DEPTH.shape = (7514,)

'CURVE_VALUES' = array([[  8.8783,  16.5181,      nan,  42.9207, 
   137.1404],
   [  8.8783,  16.4784,      nan,  42.2368, 137.8069],
   [  8.8783,  16.685 ,      nan,  41.3884, 138.402 ],
   ...,
   [     nan,      nan,      nan,      nan,      nan],
   [     nan,      nan,      nan,      nan,      nan],
   [     nan,      nan,      nan,      nan,      nan]])


   CURVE_VALUES.shape = (7514, 5)

Как я могу интерполировать 'CURVE_VALUES' над 'DEPTH', чтобы, если у меня был новый массив 'NEW_DEP' = массив ([1950.1104, 1950.2628, 1950.4152, ..., 3089.91, 3090.0624, 3090.2148])

Я могу найти соответствующие CURVE_VALUES путем интерполяции.

Я пытался использовать scipy.interpolate.interp1d для одного dim, но я хочу интерполировать массив nD по массиву 1d.

import numpy as np
from scipy import interpolate
x = np.arange(0, 10)
y = np.exp(-x/3.0)
f = interpolate.interp1d(x, y)

Я ожидаю, что результат будет той же формы: количество строк NEW_DEP x количество столбцов CURVE_VALUES

1 Ответ

0 голосов
/ 08 января 2019

Многомерная интерполяция используется, когда у вас есть (N, d) x точек и (N, 1) y точек. То, что вы пытаетесь сделать, это наоборот. Попробуйте это:

interpolators = [interp1d(DEPTH, y_slice) for y_slice in CURVE_VALUES.T]
f = lambda x: np.array([i(x) for i in interpolators])
...