У меня есть два массива numpy, содержащих временные ряды (временные метки unix).
Я хочу найти пары временных меток (1 из каждого массива), чья разница находится в пределах .
Для этого мне нужно выровнять два из данных временных рядов на два массива, так что каждый индекс имеет свою ближайшую пару. (В случае двух временных меток в массивах, одинаково близких к другой метке времени в другом массиве, я не против выбирать один из них, поскольку количество пар более важно, чем фактические значения.)
Таким образом, выровненный набор данных будет содержать два массива одного и того же размера, а также меньший массив, заполненный пустыми данными.
Я думал об использовании пакета timeseries
и функции align
.
Но я не уверен, что использовать выровненные для моих данных, которые являются таймсерами.
Пример рассмотрим два массива timeseries:
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
, которая находится внутри threshold
, и она наименьшая. Теперь, когда ts2[2]
и ts1[4]
уже спарены, они должны быть исключены из других вычислений.
Такие пары должны быть найдены, поэтому массив Output может быть длиннее фактических массивов
abs (ts1 [0] -ts2 [0]) = 16060
abs (ts1 [0] -ts2 [1]) = 15820//пара
abs (ts1 [0] -ts2 [2]) = 14212
abs (ts1 [0] -ts2 [3]) = 14273
abs (ts1 [0] -ts2 [4]) = 38444abs (ts1 [1] -ts2 [0]) = 16121
abs (ts1 [1] -ts2 [1]) = 15881
abs (ts1 [1] -ts2 [2]) = 14151
abs (ts1 [1] -ts2 [3]) = 14212
abs (ts1 [1] -ts2 [4]) = 38383abs (ts1 [2] -ts2 [0]) = 17264
abs (ts1 [2] -ts2 [1]) = 17024
abs (ts1 [2] -ts2 [2]) = 13008
abs (ts1 [2] -ts2 [3]) = 13069
abs (ts1 [2] -ts2 [4]) = 37240abs (ts1 [3] -ts2 [0]) = 17384
abs (ts1 [3] -ts2 [1]) = 17144
abs (ts1 [3] -ts2 [2]) = 12888
abs (ts1 [3] -ts2 [3]) = 17144
abs (ts1 [3] -ts2 [4]) = 37120abs (ts1 [4] -ts2 [0]) = 24569
abs (ts1 [4] -ts2 [1]) = 24329
abs (ts1 [4] -ts2 [2]) = 5703//пара
abs (ts1 [4] -ts2 [3]) = 5764
abs (ts1 [4] -ts2 [4]) = 29935abs (ts1 [5] -ts2 [0]) = 55794
abs (ts1 [5] -ts2 [1]) = 55554
abs (ts1 [5] -ts2 [2]) = 25522
abs (ts1 [5] -ts2 [3]) = 25461
abs (ts1 [5] -ts2 [4]) = 1290//параabs (ts1 [6] -ts2 [0]) = 55853
abs (ts1 [6] -ts2 [1]) = 55613
abs (ts1 [6] -ts2 [2]) = 25581
abs (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.
Пожалуйста, дайте мне знать, ясно ли этот вопрос.