计算运行次数的有效方法是“多少x小于y?”在KDB

时间:2014-10-24 08:45:26

标签: kdb

我有2个已排序的列表xy,我想查找有多少x小于y的运行计数。以下是以下工作:

x:10*til 3;   / 0 10 20
y:til 30;     / 0 1 2 ... 30
sum {x < y}[;y] each x
q) 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3

但我怀疑使用each并不是最有效的做事方式。考虑到我的xy最终可能会达到数千万件的顺序,有更快的方法吗?

1 个答案:

答案 0 :(得分:2)

如果函数太贵,可以考虑使用从属执行并行执行。我的例子使用了8个奴隶。

>q -s 8

q)x:10*til 10000
q)y:til 100000
q)\ts sum y>/:x
7200 1312358576
q)\ts sum(y>)peach x
5298 1312424112
q)(sum y>/:x)~sum(y>)peach x
1b

参考:http://code.kx.com/q/ref/control/#peach