在 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];
有两点:
hist
中的键 未排序
- 对于桶,你更喜欢输出 left 还是 right 分隔符?
要解决 1),您只需执行以下操作:
hist:(asc key hist)#hist;
解决 2) - 我的意思是,如果您想使用正确的分隔符:
hist:(+[b;key hist])!value hist;
如果我有值列表 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];
有两点:
hist
中的键 未排序- 对于桶,你更喜欢输出 left 还是 right 分隔符?
要解决 1),您只需执行以下操作:
hist:(asc key hist)#hist;
解决 2) - 我的意思是,如果您想使用正确的分隔符:
hist:(+[b;key hist])!value hist;