我如何在 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
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
假设我有一个列表:
(1 2 3)
我想找到最大值 (2
) 的索引。
在 KDB 中执行此操作的正确方法是什么?
有几种不同的方法,但这里是使用查找运算符的方法 ?
1 2 3?max 1 2 3
where
将 return 基于以下条件建立索引:
l:1 2 3;
where l = max l
,2
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