我如何在 KDB 中执行 argmax?

How do I do argmax in KDB?

假设我有一个列表:

(1 2 3)

我想找到最大值 (2) 的索引。

在 KDB 中执行此操作的正确方法是什么?

有几种不同的方法,但这里是使用查找运算符的方法 ?

 1 2 3?max 1 2 3

where 将 return 基于以下条件建立索引:

l:1 2 3;
where l = max l
,2

https://code.kx.com/q/ref/where/

Find ? will get you the index of the first occurrence of the maximum; where 并等于 所有 次出现的索引。

您可以将其中任何一个与 Zen monks idiom 一起使用:

q)show L:10?7
4 5 6 6 1 0 5 2 4 5
q).[?] 1 max\L
2
q)where .[=] 1 max\L
2 3

你为什么要这么做?由于这些表达式是一元序列,您可以组合它们,从而消除 lambda 的(微小)开销——以防您在速度上的微小差异很重要的情况下这样做。

ffm:.[?] max\[1;] @        / find first maximum
fam:where .[=] max\[1;] @  / find all maxima