两表进行类矩阵乘法的运算

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)

attachments-2023-11-vmvzTqc4654348c92af6b.png

我有两张表 tb1, tb2 像按照 tb3 的形式返回结果, 即 tb1 每个block 列有值的元素和 tb2 对应位置的元素求内积。应该怎么写脚本?

请先 登录 后评论

1 个回答

veryOrdinary

可以先转成带标签的矩阵,然后利用 cross 函数将两个矩阵的列两两求内积。如果两个矩阵的行标签不完全一致,可以先通过 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)


请先 登录 后评论
  • 1 关注
  • 0 收藏,407 浏览
  • Polly 提出于 2023-11-02 15:04

相似问题