代码之家  ›  专栏  ›  技术社区  ›  YaN

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

  •  0
  • YaN  · 技术社区  · 2 年前

    我创建了两个表, 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中实现这一点?

    enter image description here

    0 回复  |  直到 2 年前
        1
  •  0
  •   JaneYe    2 年前

    您可以转换 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