Kdb 如何通过使用扫描副词来改进peach?

Kdb 如何通过使用扫描副词来改进peach?,kdb,Kdb,我有一个时间列表,我想计算在给定的时间窗口内,每次有多少次。i、 e.对于每一次,以下时间中有多少次提前不到10分钟 这就是我到目前为止所做的,它适用于小列表,tsEDIT-如果这只是你想要的计数,那么你所需要的就是: q)1+(ts bin ts+00:10)-til count ts 1 3 2 1 1 2 2 1 1 1 旧答案-如果你试图实际生成时间列表(不确定为什么需要这样做),那么无论你做什么,你最终都会消耗大量内存(生成一个巨大的时间列表)。另外,peach可能没有用处,因为外包

我有一个时间列表,我想计算在给定的时间窗口内,每次有多少次。i、 e.对于每一次,以下时间中有多少次提前不到10分钟


这就是我到目前为止所做的,它适用于小列表,tsEDIT-如果这只是你想要的计数,那么你所需要的就是:

q)1+(ts bin ts+00:10)-til count ts
1 3 2 1 1 2 2 1 1 1
旧答案-如果你试图实际生成时间列表(不确定为什么需要这样做),那么无论你做什么,你最终都会消耗大量内存(生成一个巨大的时间列表)。另外,peach可能没有用处,因为外包给其他线程所获得的时间可能会在将结果发送回主线程所需的时间之前撤消。任何形式的迭代/循环都可能是缓慢的,因为它将以原子方式运行

话虽如此,最好的解决方案是使用bin,尤其是在列表已排序的情况下。例如,这两个列表中的任何一个都应该为您提供时间列表,并且它们的伸缩性更好(同样,如果您只是使用它们进行计数,则不需要生成列表-请参见上面的编辑):

但它们仍然需要生成索引列表,而且它们仍然会累加起来

请注意,bin(在每个项目的10分钟内给出最后一个项目的索引)速度非常快,内存效率也非常高,即使列表有几千万:

q)ts:asc `time$10000000?10000000
q)
q)\ts ts bin ts+00:10
160 201326768
ts t+til each 1+(ts bin ts+00:10)-t:til count ts

{y[1]#y[0]_x}[ts] each t,'1+(ts bin ts+00:10)-t:til count ts
q)ts:asc `time$10000000?10000000
q)
q)\ts ts bin ts+00:10
160 201326768