如何 return KDB 中二元函数的叉积

How to return a cross product of a binary function in KDB

我想探索一种更好的方法来应用二元函数,该函数通过两个参数的每个元素进行迭代。让我们以下面的函数为例来简化问题:

func:{x+y}
a:til 10
q)a
0 1 2 3 4 5 6 7 8 9
b:a
q)b:a
q)b
0 1 2 3 4 5 6 7 8 9

我要得到的是交叉产生式,这样参数的每个元素都会相互交叉并应用函数。我的预期结果是

0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 10 2 3 4 5 6 7 8 9 10 11 3 4 5 6 7 8 9 10 11 12 4 5 6 7 8 9 10 11 12 13 5 6 7 8 9 10 11 12 13 14 6 7 8 9 10 11 12 13 14 15 7 8 9 10 11 12 13 14 15 16 8 9 10 11 12 13 14 15 16 17 19 120 13 14 15 16 17 18

我目前的解决方案是先遍历参数列表:

(func/) each (a cross b)

我想知道是否有更好的方法来做到这一点?简单地使用 func'[a;b] 只会得到一个成对的结果,这不是我想要的。

以下应该是您要查找的内容:

a +/:\: b

同样适用于其他定义的函数,例如:

a {x mod y}/:\: b

你不需要交叉,只是每右或每左。因为“+”是一个向量函数,您可以只遍历一个列表并将另一个列表用作完整向量。

 q) a+/:b