在 KDB 中制作直方图的最简单方法是什么?

What's the easiest way of making a histogram in KDB?

如果我有值列表 x,制作 bin 大小 b 直方图的最简单方法是什么?

看来我可以破解一个复杂的解决方案,但我觉得一定有一个我不知道的内置函数。

到目前为止,我还没有听说过内置直方图。但我会像下面这样处理这个任务。

对于固定桶大小:

a: 0.39 0.51 0.51 0.4 0.17 0.3 0.78 0.53 0.71 0.41;
b: 0.1;
{count each group x xbar y}[b;a]
// returns 0.3 0.5 0.4 0.1 0.7!2 3 2 1 2j

对于“浮动”桶:

a: 0.39 0.51 0.51 0.4 0.17 0.3 0.78 0.53 0.71 0.41;
b: -1 0.5 0.7 1;
{count each group x@x bin y}[b;a]
// returns -1 0.5 0.7!5 3 2j

以上函数 return 以桶开始的字典作为键,桶出现的次数作为值。

假设您有一个 x 值列表(假设 x = 1000):

v:1000?1.0;

您可以通过以下方式实现您所需要的:

b:0.1;
hist:(count') group xbar[b;v];

有两点:

  1. hist 中的键 未排序
  2. 对于桶,你更喜欢输出 left 还是 right 分隔符?

要解决 1),您只需执行以下操作:

hist:(asc key hist)#hist;

解决 2) - 我的意思是,如果您想使用正确的分隔符:

hist:(+[b;key hist])!value hist;