DolphinDB:如何在表上执行类似矩阵的乘法?

问题描述 投票:0回答:1

我使用以下脚本创建两个表,tb1tb2

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 中实现这一点?

datatable dolphindb inner-product
1个回答
0
投票

您可以将 tb1tb2 转换为矩阵 m1m2,并使用

cross
函数将
wsum
函数应用于 m1m2 的所有单个元素的排列。如果两个矩阵的列名不同,请先使用
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
© www.soinside.com 2019 - 2024. All rights reserved.