为了实现这个目标,我需要将两个时间序列数据对齐到两个数组中,使得每个索引都有最接近的一对。如果两个数组中有两个时间戳与另一个数组中的某个时间戳相距相等,那么我不介意选择其中任何一个,因为成对数比实际值更重要。
因此,对齐后的数据集将有两个相同大小的数组,以及一个填充了空数据的较小数组。
我考虑使用 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
,在threshold
范围内,并且它是最小的。既然ts2[2]
和ts1[4]
已经配对,它们应该从其他计算中排除。
应找到这样的配对,因此输出数组可能比实际数组长。
所以这些对应关系是: (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。请告知我是否清楚理解了这个问题。
data_a = np.array([12345, 12846, 789789])
等。这将有助于那些试图帮助您的人。 - YXD