2015-11-19 4 views
1

Как часто бывает в науках о Земле, у меня есть временной ряд позиций (lon, lat). Временной ряд не равномерно распределен во времени. Выборка время выглядит следующим образом:Повторяющиеся временные ряды положения равномерно во времени

t_diff_every_position = [3.99, 1.00, 3.00, 4.00, 3.98, 3.99, ... ] 

И я ассоциировали положение с каждым т:

lat = [77.0591, 77.0547, 77.0537, 74.6766, 74.6693, 74.6725, ... ] 
    lon = [-135.2876, -135.2825, -135.2776, -143.7432, -143.7994, 
    -143.8582, ... ] 

Я хочу вновь попробовать свои позиции, чтобы иметь набор данных равномерно распределены во времени. Поэтому я хочу, чтобы вектор времени выглядел так:

t_resampled = [4.00, 4.00, 4.00, 4.00, 4.00, 4.00, ... ] 

и иметь соответствующую позицию из интерполяции.

Позиции не следуют монотонной функции, поэтому я не могу использовать обычные функции повторной выборки и интерполяции из scipy. Positions with time

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

+1

Вы можете использовать обычные функции интерполяции из SciPy. Один из подходов состоит в том, чтобы интерполировать широты и долготы отдельно, против кумулятивного времени, обычным способом, так что у вас есть две интерполированные функции. – jme

+0

Очень хорошая идея! Я об этом не думал. Зачем публиковать его как комментарий, а не как ответ? – Mathilde

+0

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

ответ

1

Один из подходов состоит в том, чтобы интерполировать долготы и широты отдельно. Вот пример с некоторыми имитируемыми данными.

Предположим, у нас есть 100 долгот (lon), широты (lat) и временные метки (t). Время скачками:

>>> t 
array([ 0.  , 1.09511126, 1.99576514, 2.65742629, 3.35929893, 
     4.1379694 , 5.55703942, 6.52892196, 7.64924527, 8.60496239]) 

И путь запряженной этими координатами выглядит примерно так:

enter image description here

Мы используем SciPy-х interp1d линейно интерполировать широты и долготы отдельно:

from scipy.interpolate import interp1d 
f_lon = interp1d(t, lon) 
f_lat = interp1d(t, lat) 

Затем мы создаем массив регулярных временных меток, [1, 2, 3, ..., 100] и перепродаем нашу широту s и долготы:

reg_t = np.arange(0, 99) 
reg_lon = f_lon(reg_t) 
reg_lat = f_lat(reg_t) 

Приведенные ниже графики показывают результат для интерполирования на очередном интервале np.arange(0, 99, 5), Это более грубый интервал, чем вам хотелось бы, так как довольно сложно понять, что на каждом участке есть две функции, если используется более тонкий интервал.

enter image description here

+0

Отлично, спасибо. – Mathilde

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