gpt4 book ai didi

KDB:选择对应于两个更新列的行

转载 作者:行者123 更新时间:2023-12-04 10:21:01 27 4
gpt4 key购买 nike

考虑出价和要价并不总是同时更新的金融报价数据。我只想选择出价和要价都反射(reflect)新市场水平的行。在下表中,这对应于选择行 t1、t5、t7、t9。这样做有什么优雅的方法吗? (或者,我想排除 t2、t3、t4 行,它们对应于只有一个出价/要价被更新的时间)。

time bid ask
t1 12 13
t2 12 14
t3 12 14
t4 12 14
t5 13 14
t6 13 14
t7 14 15
t8 14 15
t9 13 14

最佳答案

这应该可以解决问题(还没有大量测试)

tab:([] time:`t1`t2`t3`t4`t5`t6`t7`t8`t9;bid:12 12 12 12 13 13 14 14 13;ask:13 14 14 14 14 14 15 15 14)

q)select from tab where differ {$[all x<y;y;x]}\[flip sums each differ each (bid;ask)]
time bid ask
------------
t1 12 13
t5 13 14
t7 14 15
t9 13 14

Another example which contains more edge cases:

tab:([] time:`g`b`b`b`b`g`b`b`g`b`g`g`b`g;bid:12 12 12 12 12 13 13 14 13 13 14 13 14 14;ask:13 13 14 15 14 14 14 14 15 16 16 15 15 16)

q)select from tab where differ {$[all x<y;y;x]}\[flip sums each differ each (bid;ask)]
time bid ask
------------
g 12 13
g 13 14
g 13 15
g 14 16
g 13 15
g 14 16

可能有一种更简洁的方法,但我现在会测试这种方法。

编辑:求和后进行翻转更有效 - 上面已更改。

我看过的一种以前的方法只使用了每列不同的 bool 值。这种方法可行(并且可能更直观),但在时间和内存方面效率较低,因此我会坚持采用与上述第一种方法接近的方法。

scanner:{if[all x;x:not x];$[(y&z)|(x[0]&z)|x[1]&y;11b;x|(y;z)]}

q)select from tab where all each scanner\[00b;differ bid;differ ask]
time bid ask
------------
t1 12 13
t5 13 14
t7 14 15
t9 13 14

关于KDB:选择对应于两个更新列的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25246750/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com