Как выровнять два массива numpy временных рядов разного размера?

У меня есть два пустых массива, содержащих временные ряды (временные метки unix).
Я хочу найти пары меток времени(по 1 из каждого массива), разницакоторых находится в пределах порога.

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

Таким образом, выровненный набор данных будет иметь двамассива одинакового размераплюс меньший массив, заполняемый пустыми данными .

Я думал об использовании пакета timeseriesи функции align.
Но я не уверен , как использовать выравнивание для моих данных, которые представляют собой временные ряды.

Пример рассмотрим два массива временных рядов:

ts1=np.array([ 1311242821.0, 1311242882.0, 1311244025.0, 1311244145.0, 1311251330.0, 
               1311282555.0, 1311282614.0])
ts2=np.array([ 1311226761.0, 1311227001.0, 1311257033.0, 1311257094.0, 1311281265.0])

Выходной образец:

Теперь для ts2[2] (1311257033.0)его ближайшая пара должна быть ts1[4] (1311251330.0), потому что разница составляет 5703,0, что находится в пределах порогаи является наименьшим. Теперь, когда ts2[2]и ts1[4] уже спарены, их следует исключить из других вычислений.

Такие пары должны быть найдены, поэтому выходной массив может быть длиннее, чем фактические массивы

abs(ts1[0]-ts2[0]) = 16060
abs(ts1[0]- ts2[1]) = 15820//пара
абс (ts1[0]-ts2[2]) = 14212
абс (ts1[0]-ts2[3]) = 14273
абс(ts1[0]-ts2[4]) = 38444


абс(ts1[1]-ts2[0]) = 16121
абс (ts1[1]-ts2[1]) = 15881
абс (ts1[1]-ts2[2]) = 14151
абс (ts1[1]-ts2[3]) = 14212
абс(ts1[1]-ts2[4]) = 38383


абс(ts1[2]-ts2[0]) = 17264
абс (ts1[2]-ts2[1]) = 17024
абс (ts1[2]-ts2[2]) = 13008
абс (ts1[2]-ts2[3]) = 13069
абс(ts1[2]-ts2[4]) = 37240


абс(ts1[3]-ts2[0]) = 17384
абс (ts1[3]-ts2[1]) = 17144
абс (ts1[3]-ts2[2]) = 12888
абс (ts1[3]-ts2[3]) = 17144
абс(ts1[3]-ts2[4]) = 37120


абс(ts1[4]-ts2[0]) = 24569
abs(ts1[4]-ts2[1]) = 24329
abs(ts1[4]-ts2[2]) = 5703// пара
абс (ts1[4]-ts2[3]) = 5764
абс(ts1[4]-ts2[4]) = 29935


абс(ts1[5]-ts2[0]) = 55794
абс (ts1[5]-ts2[1]) = 55554
абс (ts1[5]-ts2[2]) = 25522
abs(ts1[5]-ts2[3]) = 25461
abs(ts1[5]-ts2[4]) = 1290// пара


abs(ts1[6]-ts2[0 ]) = 55853
абс (ts1[6]-ts2[1]) = 55613
абс (ts1[6]-ts2[2]) = 25581
абс (ts1[6]-ts2[3]) = 25520
abs(ts1[6]-ts2[4]) = 1349


Итак, пары: (ts1[0],ts2[1]), (ts1[4],ts2[2]), ( ts1[5],ts2[4])
Остальные элементы должны иметь nullв качестве пары
Последние два массива будут иметь размер 9.

Пожалуйста, дайте мне знать, если этот вопрос ясен.

12
задан SherylHohman 17 June 2017 в 20:34
поделиться