wavg 如何使用矢量化方法深入工作?

How does wavg work in depth using a vectorised approach?

下面代码段的 objective 是评估订单簿的 n 个级别的加权中间值。代码片段来自 Machine Learning and Big Data with kdb+/q (2020 Wiley) 一书。

n:10;
quote: ([] sym: n?`A`B; time: asc n?0t; bid1: n?10f; bidSize1: n?100 );
update bid2: 0 | bid1 - .1 * n ? 10, bidSize2: n?100, ask1: bid1 + .2 * n ? 10, askSize1: n?100 from quote;
update ask2: ask1 + .1 * n ? 10, askSize2: n?100 from `quote;
select sym,time, wmid: ( bidSize1; bidSize2; askSize1; askSize2 ) wavg (bid1; bid2; ask1; ask2) from quote

我想了解有关 wavg 方法如何深入处理向量列表的通用规则。请你帮助我好吗?感谢您的帮助。

这里有关于 wavg 的文档 https://code.kx.com/q/ref/avg/#wavg

从这些文档中我们可以看出调用 wavg 等价于函数 {(sum x*y)%sum x}

使用你的例子:

q)res1:select sym,time, wmid: ( bidSize1; bidSize2; askSize1; askSize2 ) wavg (bid1; bid2; ask1; ask2) from quote;
q)res2:select sym,time, wmid:{(sum x*y)%sum x} [( bidSize1; bidSize2; askSize1; askSize2 );(bid1; bid2; ask1; ask2)] from quote;
q)res1 ~ res2
1b

因此,在您的示例中,我们将 bidSize1bid、bidSize2bid2 等相乘,对结果求和,然后除以我们的大小之和,例如(bidSize1[0]+ bidSize2[0] + askSize1[0] + askSize2[0];(bidSize1[1]+ bidSize2[1] + askSize1[1] + askSize2[1]; etc...)

我不确定是否有更通用的描述方式,但以上内容可能有助于理解正在发生的事情的具体细节