如何在DolphinDB中实现块权重与特征表的内积计算?
问题描述
我有两张表:
表1(tb1):展示各符号所属的块(1表示属于,NULL表示不属于)
SYMBOL | block1 | block2 | block3 | block4 -------|--------|--------|--------|------- sym1 | | | 1 | sym2 | | 1 | | 1 sym3 | 1 | | | sym4 | | | 1 | sym5 | | | | 1
表2(tb2):包含部分符号的三个数值特征(注:并非所有符号都包含在内)
SYMBOL | col1 | col2 | col3 -------|------|------|------ sym1 | 1.1 | 2.1 | 3.1 sym3 | 1.2 | 2.2 | 3.2 sym4 | 1.3 | 2.3 | 3.3
针对tb1中的每个块,需执行以下操作:
- 找出所有标记为1的符号;
- 为这些符号在tb2中查找对应的特征值(col1、col2、col3,若存在);
- 计算以下两者的内积:
- tb1中块列的权重向量
- tb2中的每个特征列(col1/col2/col3)
示例
- block1:仅标记了sym3 → 使用其值(1.2, 2.2, 3.2);
- block3:sym1 + sym4 → 求和得到(1.1+1.3, 2.1+2.3, 3.1+3.3) = (2.4, 4.4, 6.4);
- block2/block4:其对应的符号(sym2、sym5)不在tb2中 → 返回空值。
预期输出
col1 col2 col3 ---- ---- ----- block1| 1.2 2.2 3.2 block2| block3| 2.4 4.4 6.4 block4|
请问如何在DolphinDB中实现该内积计算?
解决方案
在DolphinDB中可以通过转置表结构+关联聚合的方式实现需求,具体操作如下:
步骤1:准备测试数据
先创建两张测试表:
// 创建tb1 tb1 = table( `sym1`sym2`sym3`sym4`sym5 as SYMBOL, [NULL, NULL, 1, NULL, NULL] as block1, [NULL, 1, NULL, NULL, NULL] as block2, [1, NULL, NULL, 1, NULL] as block3, [NULL, 1, NULL, NULL, 1] as block4 ) // 创建tb2 tb2 = table( `sym1`sym3`sym4 as SYMBOL, [1.1, 1.2, 1.3] as col1, [2.1, 2.2, 2.3] as col2, [3.1, 3.2, 3.3] as col3 )
步骤2:转置tb1并关联特征数据
将tb1从宽表转为长表,筛选出属于各块的符号,再与tb2关联获取特征值:
// 转置tb1,得到每个块对应的符号列表 tb1Transposed = pivot tb1, SYMBOL, `block1`block2`block3`block4, 1 tb1Long = select blockName, SYMBOL from tb1Transposed unpivot value, blockName where value == 1 // 关联tb2获取特征值 joined = lj(tb1Long, tb2, SYMBOL)
步骤3:按块聚合计算内积
对每个块的特征值求和(即权重向量与特征列的内积,这里权重都是1),并整理成预期格式:
// 按块聚合,计算各特征列的和 result = select sum(col1) as col1, sum(col2) as col2, sum(col3) as col3 from joined group by blockName // 补充所有块(包括无匹配符号的块),并调整列顺序 allBlocks = table(`block1`block2`block3`block4 as blockName) finalResult = lj(allBlocks, result, blockName) // 重命名列并展示 rename!(finalResult, `blockName, ``) show finalResult
代码说明
- 转置操作将宽表的块列转为行,方便按块筛选符号;
- 使用
lj(左连接)确保所有块都被保留,即使没有匹配的特征数据; sum函数对应内积计算(因为权重向量中属于块的符号为1,其余为0,内积等价于求和);- 最后重命名列并展示,与预期输出格式一致。
内容的提问来源于stack exchange,提问作者Polly
相关产品推荐
相关产品推荐

