如何在 KDB 中将函数计算为矩阵?

How do I evaluate a function into a matrix in KDB?

假设我有一个根据 ij 坐标定义矩阵的函数:

f: {y+2*x}

我正在尝试创建一个在所有位置计算该函数的方阵。

我知道它需要像 f ' (til 5) /:\: til 5 这样的东西,但我很难休息。

稍微改一下你的问题,你想创建一个矩阵 A = [aij] 其中 aij = f(i , j), i, j = 0..N-1.

换句话说,您想对 i 和 j 的所有可能组合计算 f。所以:

q)N:5;
q)i:til[N] cross til N; / all combinations of i and j
q)a:f .' i;             / evaluate f for all pairs (i;j)
q)A:(N;N)#a;            / create a matrix using #: https://code.kx.com/q/ref/take/
0 1 2  3  4
2 3 4  5  6
4 5 6  7  8
6 7 8  9  10
8 9 10 11 12

P.S。不,(til 5) /:\: til 5 不完全是 您需要的,但关闭。您正在生成所有 的列表,即您正在将 til 5 的第一个元素与(另一个)til 5 的每个元素逐个配对或连接,然后第二个等等。所以你需要连接运算符 (https://code.kx.com/q/ref/join/):

(til 5),/:\: til 5

你很接近。但是不需要生成所有的坐标对然后迭代它们。 Each Right Each Left /:\: 为您和 returns 管理您想要的矩阵。

q)(til 5)f/:\:til 5
0 1 2  3  4
2 3 4  5  6
4 5 6  7  8
6 7 8  9  10
8 9 10 11 12