KDB中如何对两个列表的对应元素应用二元dyadic函数
KDB 逐位应用二元函数到两个列表的实现方法
问题场景
你有一个二元函数f[x;y],以及两个列表:
l1: a1 a2 a3 ... l2: b1 b2 b3 ...
需要得到逐位调用函数的结果列表:
f[a1;b1] f[a2;b2] f[a3;b3] ...
最优解法
直接使用KDB内置的*each-both(逐对应用)*副词,将单引号'放在二元函数后即可:
f'[l1;l2]
可运行示例
基础运算示例
以加法运算为例:
q) l1:1 2 3 q) l2:4 5 6 q) +'[l1;l2] 5 7 9
输出结果对应1+4、2+5、3+6的计算结果。
自定义函数示例
自定义二元函数也可以直接使用该语法:
// 定义二元函数:返回x乘以(y+1)的结果 q) f:{x*y+1} q) f'[l1;l2] 5 12 21
输出结果对应1*(4+1)、2*(5+1)、3*(6+1)的计算结果。
注意:两个输入列表需要长度一致,否则结果会按较短列表的长度截断,部分场景下会抛出长度不匹配错误。
其他可选写法(不推荐)
你也可以先将两个列表逐位打包再遍历处理,性能低于内置的'副词,写法更繁琐:
f each l1,'l2
内容的提问来源于stack exchange,提问作者Xiaohuolong
相关产品推荐
相关产品推荐

