使用变量获取 KDB 中元素的范围

Get range of elements in KDB using variables

为什么我不能在 KDB 的数组范围内使用变量?

test:1 2 3 4 5

这个例子不可行:

pos:3;
test[1 pos]

但这样就可以了

test[1 3]

正如你所见,当你使用test[1 3]时,(1 3)是一个列表。所以向量变量需要一个列表。

   q) list1:1 3
   q) test[list1]

所以你必须使用:

   q)n:3
   q)list1:(1;n)
   q)test[list1]
   q)test[(1;n)]  / alternate way

有关为什么只有分号不起作用以及为什么我们需要方括号 '()' 的详细解释,请查看我对此 post 的回答:

kdb/q: how to reshape a list into nRows, where nRows is a variable

要了解您的问题,请考虑:

1 2 3 7

这是一个简单的整数列表。现在考虑:

一个 2 3

其中 a 是向量。以上索引为a。简单。现在假设您想将 2 3 列表作为变量

b:2 3 a b //有效!

您具体询问如何从列表中获取范围,这在 How to get range of elements in a list in KDB?

中有介绍

在该答案中,使用变量创建索引列表并使用结果索引到 a