1

如何使用向量函数获得两个元素的总和?我想要与以下相同的结果:

{x+y}':[1 2 3 2 1]

为什么这种方法给出的东西与第一种不同?

sum':[1 2 3 2 1]
4

1 回答 1

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)]

由于 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
于 2021-03-27T11:02:08.587 回答