如何有效地获取(从列表中)小于某个索引号的值的计数?
How to efficiently get the counts of values (from a list) less than some index number?
我很难用语言描述这个函数的作用,但我有一些工作代码。
f:{[n;k] sum flip k </: til n}
i:i: 3 4 6 7 13;
f[30;i]
0 0 0 0 1 2 2 3 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5i
我担心 flip
操作对于大输入值可能会很昂贵。有没有更有效的方法来做到这一点?
同样简洁是件好事。
对于您的输入,您可以使用
获得相同的结果
{[n;k] k binr til n}
只要 k
保持升序,这就应该有效。
binr 的文档在这里:https://code.kx.com/q/ref/bin/
Seans 的答案可能更有效(测试一下),但为什么不将右手改为左手以避免翻转?
q)g:{[n;k] sum k<\:til n}
q)f[30;i]~g[30;i]
1b
我很难用语言描述这个函数的作用,但我有一些工作代码。
f:{[n;k] sum flip k </: til n}
i:i: 3 4 6 7 13;
f[30;i]
0 0 0 0 1 2 2 3 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5i
我担心 flip
操作对于大输入值可能会很昂贵。有没有更有效的方法来做到这一点?
同样简洁是件好事。
对于您的输入,您可以使用
获得相同的结果{[n;k] k binr til n}
只要 k
保持升序,这就应该有效。
binr 的文档在这里:https://code.kx.com/q/ref/bin/
Seans 的答案可能更有效(测试一下),但为什么不将右手改为左手以避免翻转?
q)g:{[n;k] sum k<\:til n}
q)f[30;i]~g[30;i]
1b