我遇到过几次从列表中收集百分位数的要求:
我写了这些方法来解决这个问题:
/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)]};
Run Code Online (Sandbox Code Playgroud)
它们适用于两个用例,但我认为这是一个太常见的用例,所以 Q 可能已经提供了一些开箱即用的功能。知道是否已经存在其他东西吗?
我已经多次遇到此任务,我认为这在交易中很常见:计算交易量加权平均价格。
我有这张桌子代表价格和数量的执行:
t:([] qty:500j, 1400j, 1700j, 600j, 1500j, 1500j, 1200j, 1300j, 1600j, 1700j; price:9.96 9.94 10.02 9.91 9.93 10.03 10.09 9.97 9.98 10.08)
Run Code Online (Sandbox Code Playgroud)
我通常计算平均价格的方式是:
(sum exec qty*price from t)%(sum exec qty from t)
Run Code Online (Sandbox Code Playgroud)
有更实用的方法吗?也许有副词?
kdb ×2