【发布时间】:2018-04-06 15:40:00
【问题描述】:
我有一个如下所示的 numpy 数组:
>>> array_data
array([[datetime.datetime(2017, 10, 24, 1, 3, 45, 104000), 50, 1],
[datetime.datetime(2017, 10, 24, 1, 3, 47, 901000), 50, 1],
[datetime.datetime(2017, 10, 24, 1, 3, 56, 214000), 50, 1],
[datetime.datetime(2017, 10, 24, 1, 4, 8, 11000), 50, 1],
[datetime.datetime(2017, 10, 24, 1, 4, 13, 120000), 50, 1],
[datetime.datetime(2017, 10, 24, 1, 4, 15, 714000), 50, 4],
[datetime.datetime(2017, 10, 24, 1, 4, 16, 214000), 50, 1],
[datetime.datetime(2017, 10, 24, 1, 4, 27, 323000), 50, 1],
[datetime.datetime(2017, 10, 24, 1, 5, 13, 261000), 50, 1],
[datetime.datetime(2017, 10, 24, 1, 5, 56, 276000), 50, 1],
[datetime.datetime(2017, 10, 24, 1, 6, 0, 886000), 50, 1],
[datetime.datetime(2017, 10, 24, 1, 6, 38, 104000), 50, 1],
[datetime.datetime(2017, 10, 24, 1, 6, 38, 995000), 50, -1],
[datetime.datetime(2017, 10, 24, 1, 6, 42, 511000), 51, 5],
[datetime.datetime(2017, 10, 24, 1, 7, 4, 714000), 50, 5],
[datetime.datetime(2017, 10, 24, 1, 7, 12, 823000), 50, 1],
[datetime.datetime(2017, 10, 24, 1, 7, 17, 229000), 50, -1],
[datetime.datetime(2017, 10, 24, 1, 7, 45, 948000), 50, 1],
[datetime.datetime(2017, 10, 24, 1, 7, 56, 245000), 50, 1],
[datetime.datetime(2017, 10, 24, 1, 8, 10, 761000), 50, -1],
[datetime.datetime(2017, 10, 24, 1, 8, 21, 464000), 50, -3],
[datetime.datetime(2017, 10, 24, 1, 8, 21, 761000), 50, -1]], dtype=object)
如果它是实时更新的,我如何在更新时选择最新一分钟的数据?例如,如果当前时间是2017, 10, 24, 1, 7, 17, 229000,我希望它打印出(50*5)+(50*1)+(50*-1),如果是2017, 10, 24, 1, 7, 45, 948000,它将打印出(50 *5)+(50*1)+(50*-1)+(50*1)。
我认为我可以在最新更新的行更新时提取它的分钟值,并创建一个向后循环并将它们的分钟值相互比较,直到它们不一样。但是,我认为当一分钟内有很多行并且更新比循环过程快时会消耗资源。有没有更有效的方法来做到这一点?
【问题讨论】:
-
虽然这个问题对我来说并不完全清楚,但如果您正在寻找按时间顺序跟踪实时更新,
queue数据结构可能更合适,甚至是一个数组按插入排序。 -
@crazyGamer 感谢您的评论。简单来说,就是想知道最新一分钟数据的范围。至于上面的数组,它将是
[-3:]。我也想绘制数据,所以我认为我需要坚持使用 numpy 数组。 -
好吧,那么我的问题是:你想在numpy数组中保留所有分钟的数据记录,还是只保留最新的
n(比如最新的4个)? -
@crazyGamer 我想保留所有数据,同时想实时跟踪一分钟数据的最新范围并进行解释。例如,如果最近一分钟(可能短于一分钟)内的值之和大于 600,我希望它发出信号。