Как я могу интерполировать данные 3D временных рядов с помощью Python? - PullRequest
0 голосов
/ 18 мая 2018

У меня есть данные 3D-временного ряда.Но у них есть некоторые пропущенные значения (np.nan).Итак, я хочу их интерполировать.

Пример:

x = [0, nan, 2, 3, 4, 5]
y = [0, nan, 2, 3, 4, 5]
z = [3, nan, 5, 6, 7, 8]

# I want
interp(1) -> [1, 1, 4] 

Как рассчитать?

Я попытался интерполировать x, y и z для каждого отдельно по сплайну.Но я чувствую, что это странно.Странно ли проводить индивидуальную интерполяцию или математически правильно, или есть какие-то решения?

В случае индивидуального расчета очень просто использовать scipy:

fx = interpolate.interp1d(time, x, kind="cubic")
fy = interpolate.interp1d(time, y, kind="cubic")
fz = interpolate.interp1d(time, z, kind="cubic")

1 Ответ

0 голосов
/ 18 мая 2018

Исходя из вашего комментария, похоже, что вы хотите заменить значения nan на среднее значение с обеих сторон (даже если вы упомянули метод сплайнов).Итак, вот простая функция на случай, если nan не произойдет в начале и в конце.импортировать numpy как np

x = np.array([0, np.nan, 2, 3, 4, 5])
y = np.array([0, np.nan, 2, 3, 4, 5])
z = np.array([3, np.nan, 5, 6, 7, 8])
def nan_mean(v):
    ind=np.where(np.isnan(v))[0]
    v[ind]=(v[ind+1]+v[ind-1])/2
nan_mean(x)
nan_mean(y)
nan_mean(z)

это возвращает желаемое значение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...