我使用以下脚本创建两个表,tb1和tb2:
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=table(`sym1`sym2`sym3`sym4`sym5 as SYMBOL,1+double(seq(1,5))/10 as col1,2+double(seq(1,5))/10 as col2,3+double(seq(1,5))/10 as col3)
我想计算tb1中每个“块”列的非空单元格值与tb2中相应单元格中的值之间的内积,并以tb3的格式返回结果,如下如下图所示。如何在 DolphinDB 中实现这一点?
您可以将 tb1 和 tb2 转换为矩阵 m1 和 m2,并使用
cross
函数将 wsum
函数应用于 m1 和 m2 的所有单个元素的排列。如果两个矩阵的列名不同,请先使用 align
函数对齐两个矩阵。请参阅以下脚本和输出:
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=table(`sym1`sym3`sym4 as SYMBOL,1+double(seq(1,3))/10 as col1,2+double(seq(1,3))/10 as col2,3+double(seq(1,3))/10 as col3)
m1 = matrix(tb1[,1:]).rename!(tb1.SYMBOL, tb1.colNames()[1:])
m2 = matrix(tb2[,1:]).rename!(tb2.SYMBOL, tb2.colNames()[1:])
mm1, mm2 = align(m1, m2, 'fj', true)
re = cross(wsum, mm1, mm2)
col1 | col2 | col3 | |
---|---|---|---|
区块1 | 1.2 | 2.2 | 3.2 |
区块2 | |||
区块3 | 2.4 | 4.4 | 6.4 |
区块4 |