q/KDB-nprev函数,用于获取之前的所有n个元素
我正在努力在KDB中编写q/KDB-nprev函数,用于获取之前的所有n个元素,kdb,Kdb,我正在努力在KDB中编写nprev函数xprev函数返回第n个元素,但我需要相对于当前元素的所有prevn元素 q)t:([] i:1+til 26; s:.Q.a) q)update xp:xprev[3;]s,p:prev s from t 非常感谢您的帮助。xprev功能基本上如下所示: xprev1:{y til[count y]-x} //readable xprev 我们可以调整它以获得所有n元素 nprev:{y til[count y]-\:1+til x} 在查询
nprev
函数xprev
函数返回第n个元素,但我需要相对于当前元素的所有prevn
元素
q)t:([] i:1+til 26; s:.Q.a)
q)update xp:xprev[3;]s,p:prev s from t
非常感谢您的帮助。xprev功能基本上如下所示:
xprev1:{y til[count y]-x} //readable xprev
我们可以调整它以获得所有n
元素
nprev:{y til[count y]-\:1+til x}
在查询中使用nprev
q)update np: nprev[3;s] , xp1:xprev1[3;s] , xp: xprev[3;s], p:prev[s] from t
i s np xp1 xp p
-------------------
1 a " "
2 b "a " a
3 c "ba " b
4 d "cba" a a c
5 e "dcb" b b d
6 f "edc" c c e
k相当于nprev
k)nprev:{$[0h>@y;'`rank;y(!#y)-\:1+!x]}
类似地,nnext
看起来
k)nnext:{$[0h>@y;'`rank;y(!#y)+\:1+!x]}
xprev
函数基本上如下所示:
xprev1:{y til[count y]-x} //readable xprev
我们可以调整它以获得所有n
元素
nprev:{y til[count y]-\:1+til x}
在查询中使用nprev
q)update np: nprev[3;s] , xp1:xprev1[3;s] , xp: xprev[3;s], p:prev[s] from t
i s np xp1 xp p
-------------------
1 a " "
2 b "a " a
3 c "ba " b
4 d "cba" a a c
5 e "dcb" b b d
6 f "edc" c c e
k相当于nprev
k)nprev:{$[0h>@y;'`rank;y(!#y)-\:1+!x]}
类似地,nnext
看起来
k)nnext:{$[0h>@y;'`rank;y(!#y)+\:1+!x]}
通过反复应用
prev
并翻转结果,可以获得所需的结果
q)n:3
q)select flip 1_prev\[n;s] from t
s
-----
" "
"a "
"ba "
"cba"
"dcb"
"edc"
..
如果
n
远小于行数,这将比一些更简单的解决方案更快。您可以通过反复应用prev
并翻转结果来实现所需的结果
q)n:3
q)select flip 1_prev\[n;s] from t
s
-----
" "
"a "
"ba "
"cba"
"dcb"
"edc"
..
如果
n
远小于行数,这将比一些更简单的解决方案更快。这里还记录了一些通用滑动窗口功能:这里还记录了一些通用滑动窗口功能: