如何在 KDB 中将函数计算为矩阵?
How do I evaluate a function into a matrix in KDB?
假设我有一个根据 i
和 j
坐标定义矩阵的函数:
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
假设我有一个根据 i
和 j
坐标定义矩阵的函数:
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