DolphinDB数组向量列向聚合:逐档位计算买卖均价
在DolphinDB中计算数组向量的逐档位(列向)均值
我在DolphinDB中开展数据分析任务,需要对存储10档买卖盘数据的数组向量执行列向聚合。具体来说,有bid1至bid10的买价数据和ask1至ask10的卖价数据,目标是逐档位计算所有行的均值,返回与档位数量长度一致的数组向量。
简化示例数据
为清晰展示逻辑,以下用3档数据做示例(实际场景为10档):
t = table( take(2025.08.01T09:30:00..2025.08.01T09:30:05, 5) as DateTime, take(`AAPL, 5) as SecurityID, array(DOUBLE[], 0).append!([1.1 1.2 1.3, 1.2 1.3 1.4, 1.0 1.1 1.2, 1.3 1.1 1.4, 1.1 1.5 1.6]) as BidPrice, array(DOUBLE[], 0).append!([2.1 2.2 2.3, 2.2 2.3 2.4, 2.0 2.1 2.2, 2.1 2.5 2.1, 2.0 2.1 2.3]) as AskPrice )
表t的实际数据如下:
| DateTime | SecurityID | BidPrice | AskPrice |
|---|---|---|---|
| 2023.11.01T09:30:00 | AAPL | [1.1, 1.2, 1.3] | [2.1, 2.2, 2.3] |
| 2023.11.01T09:30:01 | AAPL | [1.2, 1.3, 1.4] | [2.2, 2.3, 2.4] |
| 2023.11.01T09:30:02 | AAPL | [1.0, 1.1, 1.2] | [2.0, 2.1, 2.2] |
| 2023.11.01T09:30:03 | AAPL | [1.3, 1.1, 1.4] | [2.1, 2.5, 2.1] |
| 2023.11.01T09:30:04 | AAPL | [1.1, 1.5, 1.6] | [2.0, 2.1, 2.3] |
BidPrice和AskPrice列的每行都是对应不同档位的价格数组向量,需要计算:
BidPrice_avg:每个档位的买价均值,例如[(1.1+1.2+1.0+1.3+1.1)/5, (1.2+1.3+1.1+1.1+1.5)/5, (1.3+1.4+1.2+1.4+1.6)/5]AskPrice_avg:每个档位的卖价均值
期望输出
SecurityID BidPrice_avg AskPrice_avg AAPL [1.140000,1.240000,1.380000] [2.080000,2.239999,2.260000]
尝试过的方法及问题
1. 直接使用avg函数
select avg(BidPrice) as avg_bid from t // 返回1.25(不符合预期)
该方法返回数组中所有值的标量平均值,而非逐档位的列向均值。
2. 使用rowAvg函数
select rowAvg(BidPrice) as avg_bid from t
返回结果为每行的均值,不符合逐档位计算所有行均值的需求:
avg_bid 1.2 1.3 1.1 1.2667 1.4
解决方案
方法1:使用内置函数arrayAvg
DolphinDB提供了arrayAvg函数,可直接实现数组向量的列向聚合,计算每个档位的均值:
select SecurityID, arrayAvg(BidPrice) as BidPrice_avg, arrayAvg(AskPrice) as AskPrice_avg from t group by SecurityID
执行后即可得到符合要求的逐档位均值结果。
方法2:手动转置数组计算(兼容旧版本)
如果使用的DolphinDB版本未提供arrayAvg,可通过转置数组为矩阵后计算均值:
select SecurityID, (matrix(BidPrice).avg(1)).toArray() as BidPrice_avg, (matrix(AskPrice).avg(1)).toArray() as AskPrice_avg from t group by SecurityID
逻辑说明:
matrix(BidPrice)将数组列转换为矩阵,每行对应原表的一个数组avg(1)计算矩阵每列的均值(参数1表示按列聚合)toArray()将结果转换为数组向量,匹配期望输出格式
内容的提问来源于stack exchange,提问作者user31077149
相关产品推荐
相关产品推荐

