用null替换无限,然后使用q kdb中的填充来填充

时间:2019-06-07 16:53:21

标签: kdb

我正在查看填充说明,并遇到以下示例:即,如果存在无限大,请将其替换为空值,然后使用填充进行填充。

q)fills {(x where x=0W):0N;x} 0N 2 3 0W 0N 7 0W
Output - 0N 2 3 3 3 7 7

我想进一步扩展这个问题,如果输出中的第一个值为Null,然后用默认值1填充它,为此我编写了两个版本的解决方案。

{(x where x=0N):1;x} fills {(x where x=0W):0N;x} 0N 2 3 0W 0N 20 30 0W
1^fills {(x where x=0W):0N;x} 0N 2 3 0W 0N 20 30 0W /- Output - 1 2 3 3 3 20 30 30

这两个是优化版本(我认为这是使用填充的第二个版本)?
还有更好/优化的版本吗?

2 个答案:

答案 0 :(得分:1)

您始终可以通过对较大的向量进行计时来测试解决方案

q)\ts {(x where x=0N):1;x} fills {(x where x=0W):0N;x}10000000#0N 2 3 0W 0N 20 30 0W
196 553649552

q)\ts 1^fills {(x where x=0W):0N;x}10000000#0N 2 3 0W 0N 20 30 0W
190 553649216

对于较大的向量,只需将第一项填充为1,就可以得到较小的改进,前提是这是您唯一需要默认设置的项

q)@[;0;1^]fills {(x where x=0W):0N;x}0N 2 3 0W 0N 20 30 0W
1 2 3 3 3 20 30 30

但是,如果开头有一系列空值(不只是一个),那么这将无济于事

q)@[;0;1^]fills {(x where x=0W):0N;x}0N 0N 2 3 0W 0N 20 30 0W
1 0N 2 3 3 3 20 30 30

在这种情况下,最好在整个向量上使用1^

答案 1 :(得分:1)

将1加到无穷大会将其转换为空

.wpcf7 .wpcf7-form .wpcf7-mail-sent-ok { 
    display: none !important; 
}

要保留原始值和空值,请从结果列表中减去1

q)0W 10 0N+1
0N 11 0N

填充可以接受两个参数(如果给两个参数,则起始数字为x)

q)-1+0W 10 0N+1
0N 10 0N

因此完全满足您的要求

q)fills 0N 10 20 0N 40
0N 10 20 20 40
q)fills[33;] 0N 10 20 0N 40
33 10 20 20 40

HTH, 肖恩