我如何测试 KDB 中的范围?
How do I test a range in KDB?
假设我有一个范围 3 < x < 5
。
获得 1
if x > 5
、-1
if x < 3
和 0
的最简洁方法是什么(如果它在 3 <x <5
范围内) ?
我正在尝试将 &
和 |
混合在一起(尝试调整此处的答案:)。不过我不确定这种方式是否可行。
另一个选项:
q){$[x<3;-1;x>5;1;0]}each til 10
-1 -1 -1 0 0 0 1 1 1 1
您可以调整 bin
关键字,它的功能与您正在寻找的开箱即用:
q)3 5 bin 0 1 2 3 4 5 6
-1 -1 -1 0 0 1 1
如果您正在寻找 0
返回 n ,其中 x < n < y
那么我认为您可以这样做:
q)f:{[range;x] (range + 1 0) bin x}
q)range35:f[3 5;]
q)range35 0N!til 10
0 1 2 3 4 5 6 7 8 9
-1 -1 -1 -1 0 1 1 1 1 1
其中 returns 0 代表数字 4
你可以看一个step dictionary,它可以用在很多地方:
q)(`s#-0W 3 6!-1 0 1) til 10
-1 -1 -1 0 0 0 1 1 1 1
或填写基本情况:
q)-1^(`s#3 6!0 1) til 10
-1 -1 -1 0 0 0 1 1 1 1
对于您的确切问题,更好的方法是直接使用 bin:
q)3 6 bin til 10
-1 -1 -1 0 0 0 1 1 1 1
顺便说一句,Sean 和 Rian 使用 bin
的答案比使用条件评估更快——但是在这种情况下它已经“快”了。为了便于阅读,我会 select 条件评估,因为阅读、理解和修改条件是多么清晰和容易,returns。
q)\t:10000 {[range;x] (range + 1 0) bin x}[3 5;-50+til 100]
11
q)\t:10000 3 6 bin -50+til 100
10
q)\t:10000 {$[x<3;-1;x>5;1;0]}'[-50+til 100]
75
假设我有一个范围 3 < x < 5
。
获得 1
if x > 5
、-1
if x < 3
和 0
的最简洁方法是什么(如果它在 3 <x <5
范围内) ?
我正在尝试将 &
和 |
混合在一起(尝试调整此处的答案:
另一个选项:
q){$[x<3;-1;x>5;1;0]}each til 10
-1 -1 -1 0 0 0 1 1 1 1
您可以调整 bin
关键字,它的功能与您正在寻找的开箱即用:
q)3 5 bin 0 1 2 3 4 5 6
-1 -1 -1 0 0 1 1
如果您正在寻找 0
返回 n ,其中 x < n < y
那么我认为您可以这样做:
q)f:{[range;x] (range + 1 0) bin x}
q)range35:f[3 5;]
q)range35 0N!til 10
0 1 2 3 4 5 6 7 8 9
-1 -1 -1 -1 0 1 1 1 1 1
其中 returns 0 代表数字 4
你可以看一个step dictionary,它可以用在很多地方:
q)(`s#-0W 3 6!-1 0 1) til 10
-1 -1 -1 0 0 0 1 1 1 1
或填写基本情况:
q)-1^(`s#3 6!0 1) til 10
-1 -1 -1 0 0 0 1 1 1 1
对于您的确切问题,更好的方法是直接使用 bin:
q)3 6 bin til 10
-1 -1 -1 0 0 0 1 1 1 1
顺便说一句,Sean 和 Rian 使用 bin
的答案比使用条件评估更快——但是在这种情况下它已经“快”了。为了便于阅读,我会 select 条件评估,因为阅读、理解和修改条件是多么清晰和容易,returns。
q)\t:10000 {[range;x] (range + 1 0) bin x}[3 5;-50+til 100]
11
q)\t:10000 3 6 bin -50+til 100
10
q)\t:10000 {$[x<3;-1;x>5;1;0]}'[-50+til 100]
75