Dex*_*ers 12 python time-series alignment closest-points
我有两个包含时间序列(unix时间戳)的numpy数组.
我想找到一对时间戳(每个数组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])
Run Code Online (Sandbox Code Playgroud)
输出样本:
现在ts2[2] (1311257033.0),它最接近的一对应该是ts1[4] (1311251330.0)因为差异在于5703.0,threshold它是最小的,并且它是最小的.现在,ts2[2]和ts1[4] 已经配对,他们应该被排除在外的其他计算.
应该找到这样的Pairs,因此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])= 38444
abs(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])= 38383
abs(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])= 37240
abs(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])= 37120
abs(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])= 29935
abs(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.
如果这个问题很清楚,请告诉我.
我不知道你所说的对齐时间戳是什么意思。但是您可以使用 time 模块将时间戳表示为浮点数或整数。第一步,您可以将任何用户格式转换为由 定义的数组time.struct_time。在第二步中,您可以将其转换为纪元开始的秒数。然后你有整数值来使用时间戳进行计算。
文档time.strptime() 中很好地解释了如何使用转换用户格式:
>>> import time
>>> t = time.strptime("30 Nov 00", "%d %b %y")
>>> t
time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0,
tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)
>>> time.mktime(t)
975538800.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2604 次 |
| 最近记录: |