q / KDB - 用于获取所有前n个元素的nprev函数

时间:2018-04-02 15:41:26

标签: kdb

我正在努力在KDB中编写I = imread('343a.tif'); subplot(2,2,1);imshow(I);title('Original Image'); I = im2double (I); H = fspecial('log', 11,1.5); Laplacian = imfilter(I,H,'replicate'); subplot(2,2,2);imshow(Laplacian, []);title('Laplacian Image'); H = fspecial('sobel'); Edge = imfilter(I,H,'replicate'); subplot(2,2,4);imshow(Edge);title('Sobel Image'); 函数; nprev函数返回第n个元素,但我需要相对于当前元素的所有prev xprev元素。

n

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

通过重复应用prev并翻转结果

,您可以获得所需的结果
q)n:3
q)select flip 1_prev\[n;s] from t
s
-----
"   "
"a  "
"ba "
"cba"
"dcb"
"edc"
..

如果n比行数小得多,这将比一些更直接的解决方案更快。

答案 1 :(得分:1)

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]}