为了组合时间序列数据,我需要执行以下基本步骤:

>>> xs1
array([ 0, 10, 12, 16, 25, 29])
>>> xs2
array([ 0,  5, 10, 15, 20, 25, 30])

如何最好地获得以下解决方案:
>>> xs1_ = np.array([0,0,10,12,12,16,16,25,29,29])
>>> xs2_ = np.array([0,5,10,10,15,15,20,25,25,30])

这是为了校准在x1x2时间进行的测量。
假设从时间xs1的序列0开始的测量有效,直到该序列中的下一个测量完成,即时间10。我们可以将这两个级数插值到它们的最大公约数,但这很可能1并产生一个巨大的膨胀。因此,最好只对xs1xs2的并集进行插值在xs1_xs2_中,通过列表索引对齐要比较的x值。也就是说,我们将时间5串联xs2_与时间0串联xs1_进行比较,因为xs1_串联中的下一个测量仅在时间10晚些时候进行从视觉的角度,想象一下两个测量的阶梯图(这里没有显示y值),我们总是比较彼此上方的线。
虽然我正在努力如何命名这项任务,但我认为这是一个普遍感兴趣的问题,因此认为在这里寻求最佳解决办法是适当的。

最佳答案

我的建议是:

a=np.array([0,10,12,16,25,29])
b=np.array([0,5,10,15,20,25,30])
c=set(a).union(b)
#c = {0, 5, 10, 12, 15, 16, 20, 25, 29, 30}
xs1_= [max([i for i in a if i<=j]) for j in c]
# [0, 0, 10, 12, 12, 16, 16, 25, 29, 29]
xs2 = [max([i for i in b if i<=j]) for j in c]
# [0, 5, 10, 10, 15, 15, 20, 25, 25, 30]

1)A和B是你的两个第一名单。
2)c是表示两个数组的并集。通过这样做,可以获得两个数组中的所有值。
3)然后,对于这个集合的每个元素,我将选择A或B中存在的值的最大值,该值小于或等于该元素。

10-01 06:36
查看更多