KDB中如何对含零数组执行前向填充?
Kdb+ 整数数组零值前向填充的类型错误解决办法
错误原因
你碰到的'type错误根源在于:原数组a是整数类型,但你尝试用来替换零值的0N/null是浮点型null,::是通用null——这些值的类型和原整数数组不兼容,Kdb+不允许在整数数组中插入非整数值。
正确解决方案
方案1:用整数类型null替换零值
Kdb+中整数类型的专属null是0Ni,用它替换数组中的零后,再调用fills做前向填充:
a: 0 0 1 0 0 2 0 0 0 a: @[a; where a=0; 0Ni]; fills a
执行结果:0 0 1 1 1 2 2 2 2(整数数组,完全匹配需求)
方案2:转浮点类型后填充
如果需要浮点结果,或者不想记忆整数null的写法,可以先将数组转为浮点类型,再用浮点null0N替换零值:
a: 0 0 1 0 0 2 0 0 0 a: @[float a; where a=0; 0N]; fills a
执行结果:0 0 1 1 1 2 2 2 2f,若要转回整数,可追加int转换:
int fills @[float a; where a=0; 0N]
简洁写法
可以合并操作,一步完成填充:
fills @[a; a=0;:;0Ni]
内容的提问来源于stack exchange,提问作者marital_weeping
相关产品推荐
相关产品推荐

