python - Numpy:如何最好地对齐两个排序数组?

标签 python arrays algorithm numpy time-series

为了合并时间序列数据,我剩下以下基本步骤:

>>> 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 值的列表索引对齐。 IE。我们将 xs2_ 系列中的时间 5xs1_ 系列中的时间 0 进行比较,作为 系列中的下一个测量值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 中存在的值中的最大值,该值保持小于或等于该元素。

关于python - Numpy:如何最好地对齐两个排序数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56275381/

相关文章:

python - Pandas reset_index() 在通过多种方法分组和聚合后不起作用

将矩阵的每一行复制到一个临时数组

javascript - 过滤后将数组合并为一个数组

algorithm - 如何找到 2 个数字的最高 GCD,使得这 2 个数字来自给定的数字范围?

python - 缺少 python 3 API 函数

python - 使用 dict 重新映射 pandas 列中的值,保留 NaN

algorithm - 用 Ocaml 中的另一个子列表替换子列表

java - 帮助 :Graph contest problem: maybe a modified Dijkstra or another alternative algorithm

python - 我想让命令 python3 运行 python3.7

php - 将 session 数组存储在数据库中