如何使用向量函数获得两个元素的总和?我想要与以下相同的结果:
{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)]
由于 each-prior ( ':
) 从输入创建二进制对并尝试应用 rank 2 函数,因此它在您的 rank 2 function 上按预期工作{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(并且不使用 each-prior)实现此目的的另一种方法是使用prev
然后 sum
q){sum(prev x;x)}[1 2 3 2 1]
0N 3 5 5 3