kdb沃库普。从映射到大于x的最小val的表中获取值
假设我有口述kdb沃库普。从映射到大于x的最小val的表中获取值,kdb,q-lang,Kdb,Q Lang,假设我有口述 d:flip(100 200 400 800 1600; 1 3 4 6 10) 如何创建一个查找函数,返回大于x的最小键的值?给一张桌子 tbl:flip `sym`val!(`a`b`c`d; 50 280 1200 1800) 我想做一些像 {[x] : update new:fun[x[`val]] from x} each tbl 最后坐在这样一张桌子上 tbl:flip `sym`val`new!(`a`b`c`d; 50 280 1200 1800; 1 4 1
d:flip(100 200 400 800 1600; 1 3 4 6 10)
如何创建一个查找函数,返回大于x的最小键的值?给一张桌子
tbl:flip `sym`val!(`a`b`c`d; 50 280 1200 1800)
我想做一些像
{[x] : update new:fun[x[`val]] from x} each tbl
最后坐在这样一张桌子上
tbl:flip `sym`val`new!(`a`b`c`d; 50 280 1200 1800; 1 4 10 0N)
sym val new
a 50 1
b 280 4
c 1200 10
d 1800
我想您应该使用返回下一个大于或等于
x
的元素。请注意,您应该使用一个排序的列表,这样才能正常工作。对于上面的示例,使用d:(!)将d
转换为字典。flip d
我想到了:
q)k:asc key d
q)d k k binr tbl`val
1 4 10 0N
q)update new:d k k binr val from tbl
sym val new
------------
a 50 1
b 280 4
c 1200 10
d 1800
您可以从中获得要与使用的字典键:k k binr tbl`val
编辑:如果表中的值需要映射到大于x但不等于的值,可以尝试:
q)show tbl:update val:100 from tbl where i=0
sym val
--------
a 100
b 280
c 1200
d 1800
q)update new:d k (k-1) binr val from tbl
sym val new
------------
a 100 3
b 280 4
c 1200 10
d 1800
我想您应该使用返回下一个大于或等于x
的元素。请注意,您应该使用一个排序的列表,这样才能正常工作。对于上面的示例,使用d:(!)将d
转换为字典。flip d
我想到了:
q)k:asc key d
q)d k k binr tbl`val
1 4 10 0N
q)update new:d k k binr val from tbl
sym val new
------------
a 50 1
b 280 4
c 1200 10
d 1800
您可以从中获得要与使用的字典键:k k binr tbl`val
编辑:如果表中的值需要映射到大于x但不等于的值,可以尝试:
q)show tbl:update val:100 from tbl where i=0
sym val
--------
a 100
b 280
c 1200
d 1800
q)update new:d k (k-1) binr val from tbl
sym val new
------------
a 100 3
b 280 4
c 1200 10
d 1800
分步字典可能会有所帮助
分步字典可能会有所帮助
当我对字典排序时,k:asc key d我得到一个类型错误您提供的变量d
当前不是一个字典,只是一个列表列表。我通过执行:d:(!)来转换它。翻转d
。完美。这正是我所希望的。谢谢,当我对字典排序时,k:asc键d我得到一个类型错误您提供的变量d
当前不是一个字典,只是一个列表列表。我通过执行:d:(!)来转换它。翻转d
。完美。这正是我所希望的。谢谢