gpt4 book ai didi

kdb - 查询列表中百分位的有效方法

转载 作者:行者123 更新时间:2023-12-04 17:12:45 25 4
gpt4 key购买 nike

我曾多次遇到过从列表中收集百分位数的要求:

  1. 某个数字在哪个百分位内?
  2. 列表中的第 n 个百分位数是多少?

我写了这些方法来解决这个问题:

/for 1:    
percentileWithinThreshold:{[threshold;list] (100 * count where list <= threshold) % count list};

/for 2:
thresholdForPercentile:{[percentile;list] (asc list)[-1 + "j"$((percentile % 100) * count list)]};

它们对于这两个用例都很有效,但我认为这是一个太常见的用例,所以 Q 可能已经提供了开箱即用的功能,可以实现相同的功能。知道是否已经存在其他东西吗?

最佳答案

'100 xrank ' 生成百分位数。

  q) 100 xrank 1 2 3 4
q) 0 25 50 75

您的第二个要求的解决方案:

  q) f:{ y (100 xrank y:asc y) bin x}

另请注意,您的第二个函数结果并不总是与 xrank 相同。原因是“xrank”使用分数索引输出的下限,这是计算百分位数的正常情况,并且您的函数将值向上舍入并减去 -1,这确保输出始终小于等于输入百分位数。例如:

  q) thresholdForPercentile[63;til 21] / output 12 
q) f[63;til 21] / output 13

对于第一个要求,没有内置功能。但是,如果您保持输入列表排序,您可以改进您的函数,因为在这种情况下您可以使用“bin”函数,它在大列表上运行得更快。

  q) percentileWithinThreshold:{[threshold;list] (100 * 1+list bin threshold) % count list};

请记住,如果一个参数是浮点类型而另一个参数是整数,则“bin”将引发类型错误。因此,请确保在函数内正确地转换它们。

关于kdb - 查询列表中百分位的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54509754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com