2015-07-29 3 views
1

В Науках о Земле мы сталкиваемся с общей проблемой. Иногда мы имеем данные, которые представляют любой заданный параметр, отобранный с разными интервалами времени, которые не обязательно равномерно распределены.передискретизация (уменьшение масштаба) 2D-вектор следующий другой вектор 1d/2d

Например, у нас есть время против температуры, но временной интервал между показаниями температуры не равномерно разнесен. Теперь, много раз нам нужно сравнить этот временной ряд с другим временным рядом (для того же или любого другого параметра, например, влажности), который был отбирается с различными временными интервалами, а также неравномерно распределенными.

Что я хочу сделать в Python - это уменьшить масштаб серии с более точными точками данных (температура), интерполируя данные и передискретируя их на те же промежутки времени, что и второй временной ряд (в этом случае влажность).

Программно в Python У меня есть 2 x 2D-массива с разными длинами, и я хочу перераспределить самый длинный массив на те же интервалы, что и более короткий массив, линейно интерполируя при необходимости для создания соответствующих точек данных.

Есть ли какая-либо функция или библиотека в python, которая может сделать это простым способом?

Благодаря

ответ

1

Я считаю, что вы ищете интерполяции SciPy в:

http://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html

Я приспособил пример работы для точек, которые не равномерно.

from scipy.interpolate import interp1d 
import numpy as np 

x = np.linspace(0, 10, num=11, endpoint=True) + np.random.normal(loc=0, scale=2, size=11) 
y = np.cos(-x**2/9.0) 
f = interp1d(x, y) 
f2 = interp1d(x, y, kind='cubic') 

xmin = min(x) 
xmax = max(x) 
xnew = np.linspace(xmin, xmax, num=101, endpoint=True) 
import matplotlib.pyplot as plt 
plt.plot(x, y, 'o', xnew, f(xnew), '-', xnew, f2(xnew), '--') 
plt.legend(['data', 'linear', 'cubic'], loc='best') 
plt.show() 

enter image description here

+0

Спасибо, что полезно, но не совсем то, что я ищу. См. Мой комментарий ниже. –

+0

Я не могу решить вашу точную проблему, если вы не включили демонстрационный код. Вы не можете применить мой пример к своей проблеме? – Joel

+0

Привет, я хотел вставить изображение, которое самоочевидно, но поскольку мой рев слишком низок, я не могу этого сделать. Попробует отредактировать мой пост с псевдокодом. –

Смежные вопросы