我们如何在 q 中使用迭代器将函数列表应用于每个参数列表?
How can we use iterators in q to apply a list of functions to each of a list of arguments?
在q/kdb中,我们可以将函数应用于多个参数,如下所示:
f each (1;2;3)
我们还可以将定义的参数应用于函数列表:
flist: (f1:{x+y+z},f2:{x+y-z},f3:{x-y+z});
flist .\: 1 2 3
结合这两种方法的最有效方法是什么 - 将列表中的每个函数作为参数应用于列表中的每个值。例如,将 3 个一元函数 f1、f2 和 f3 应用于包含值 1、2 和 3 的列表(产生 9 次调用)。
非常感谢任何帮助!
您可以使用 eachboth (') 运算符:
q)f1:1+;f2:2+;f3:3+
q)(f1;f2;f3) @' 10 20 30
11 22 33
或者在 multi-argument 函数的情况下,
q)g1:+;g2:-;g3:*
q)(g1;g2;g3) .' (2 1;3 2;2 2)
3 1 4
并且如果要将每个函数应用于每个值,则需要先形成叉积:
q)(@/)each(f1;f2;f3) cross 10 20 30
11 21 31 12 22 32 13 23 33
您可以结合使用一元 apply-at @
(因为您处理的是一元函数)和 each-left 和 each-right。例如:
q)({x+1};{neg x};{x*x}) @\:/: (1 2 3)
2 -1 1
3 -2 4
4 -3 9
在q/kdb中,我们可以将函数应用于多个参数,如下所示:
f each (1;2;3)
我们还可以将定义的参数应用于函数列表:
flist: (f1:{x+y+z},f2:{x+y-z},f3:{x-y+z});
flist .\: 1 2 3
结合这两种方法的最有效方法是什么 - 将列表中的每个函数作为参数应用于列表中的每个值。例如,将 3 个一元函数 f1、f2 和 f3 应用于包含值 1、2 和 3 的列表(产生 9 次调用)。
非常感谢任何帮助!
您可以使用 eachboth (') 运算符:
q)f1:1+;f2:2+;f3:3+
q)(f1;f2;f3) @' 10 20 30
11 22 33
或者在 multi-argument 函数的情况下,
q)g1:+;g2:-;g3:*
q)(g1;g2;g3) .' (2 1;3 2;2 2)
3 1 4
并且如果要将每个函数应用于每个值,则需要先形成叉积:
q)(@/)each(f1;f2;f3) cross 10 20 30
11 21 31 12 22 32 13 23 33
您可以结合使用一元 apply-at @
(因为您处理的是一元函数)和 each-left 和 each-right。例如:
q)({x+1};{neg x};{x*x}) @\:/: (1 2 3)
2 -1 1
3 -2 4
4 -3 9