Kdb 使用向量函数对每两个元素求和

Kdb 使用向量函数对每两个元素求和,kdb,k,Kdb,K,如何用向量函数求两个元素之和?我希望得到与以下相同的结果: {x+y}':[1 2 3 2 1] 为什么这种方法与第一种不同 sum':[1 2 3 2 1] sum与{x+y}不同 sum具有秩1,表示它接受一个输入并对该输入的元素求和 它可以和一个原子相加: q)sum 1 1 统一的名单 q)sum 1 2 3 或者一个列表 q)sum(1 2;3 4) 4 6 {x+y}是秩2,意味着它需要两个输入 q){x+y}[1;2] 3 q){x+y}[1 2;3 4] 4 6 给它

如何用向量函数求两个元素之和?我希望得到与以下相同的结果:

{x+y}':[1 2 3 2 1]
为什么这种方法与第一种不同

sum':[1 2 3 2 1]

sum
{x+y}
不同

sum
具有秩1,表示它接受一个输入并对该输入的元素求和

它可以和一个原子相加:

q)sum 1
1
统一的名单

q)sum 1 2
3
或者一个列表

q)sum(1 2;3 4)
4 6
{x+y}
是秩2,意味着它需要两个输入

q){x+y}[1;2]
3
q){x+y}[1 2;3 4]
4 6
给它一个原子、一个列表或一系列列表,就可以得到投影

q){x+y}1
{x+y}[1]
q){x+y}1 2
{x+y}[1 2]
q){x+y}(1 2;3 4)
{x+y}[(1 2;3 4)]
由于每个previor(
)都从输入中创建二进制对并尝试应用秩2函数,因此它在秩2函数
{x+y}
上按预期工作

但是,由于
sum
不是秩2,因此每个优先级不会以相同的方式生成对,这相当于

q){x}':[1 2 3 2 1]
1 2 3 2 1
q){sum x}':[1 2 3 2 1]
1 2 3 2 1
您可以强制将其设置为第2级:

q){sum(x;y)}':[1 2 3 2 1]
1 3 5 5 3
但这会给出不同的结果,因为
sum
忽略空值而
+
不忽略空值

q)sum(0N;1)
1
q)0N+1
0N
最后,使用sum(不使用每个先验)实现此目的的另一种方法是使用
prev
移动向量,然后求和

q){sum(prev x;x)}[1 2 3 2 1]
0N 3 5 5 3

sum
{x+y}
不同

sum
具有秩1,表示它接受一个输入并对该输入的元素求和

它可以和一个原子相加:

q)sum 1
1
统一的名单

q)sum 1 2
3
或者一个列表

q)sum(1 2;3 4)
4 6
{x+y}
是秩2,意味着它需要两个输入

q){x+y}[1;2]
3
q){x+y}[1 2;3 4]
4 6
给它一个原子、一个列表或一系列列表,就可以得到投影

q){x+y}1
{x+y}[1]
q){x+y}1 2
{x+y}[1 2]
q){x+y}(1 2;3 4)
{x+y}[(1 2;3 4)]
由于每个previor(
)都从输入中创建二进制对并尝试应用秩2函数,因此它在秩2函数
{x+y}
上按预期工作

但是,由于
sum
不是秩2,因此每个优先级不会以相同的方式生成对,这相当于

q){x}':[1 2 3 2 1]
1 2 3 2 1
q){sum x}':[1 2 3 2 1]
1 2 3 2 1
您可以强制将其设置为第2级:

q){sum(x;y)}':[1 2 3 2 1]
1 3 5 5 3
但这会给出不同的结果,因为
sum
忽略空值而
+
不忽略空值

q)sum(0N;1)
1
q)0N+1
0N
最后,使用sum(不使用每个先验)实现此目的的另一种方法是使用
prev
移动向量,然后求和

q){sum(prev x;x)}[1 2 3 2 1]
0N 3 5 5 3

只需让
sum
充当v1,强制
充当每个并行项,而不是每个前置项。谢谢你,特里!是的,说得好!这比我刚才得到的解释要好得多,
sum
充当v1,迫使
充当每个并行项,而不是每个先前项。谢谢你,特里!是的,说得好!这比我解释得更好哈