【问题标题】:BigQuery: straight table format of matrix multiplication into more traditional Matrix multiplication format?BigQuery:将矩阵乘法的直表格式转换为更传统的矩阵乘法格式?
【发布时间】:2018-07-27 14:44:02
【问题描述】:

这个问题here 展示了如何将矩阵乘法转换为直表格式,例如给定 (6x1) (Path, value) 矩阵,您将得到 (36,1) 直表。现在我想得到传统的矩阵乘法格式,在示例中它是(6x6)矩阵。

如何将矩阵乘法的直表塑造成更传统的矩阵乘法格式?

--standardSQL
WITH MatrixA AS (
  SELECT 1 AS p, 2 AS val UNION ALL
  SELECT 2, -3 UNION ALL
  SELECT 3, 4 UNION ALL
  SELECT 4, -1 UNION ALL
  SELECT 5, 0 UNION ALL
  SELECT 6, 2 
), MatrixB AS (
  SELECT 1 AS p, -1 AS val UNION ALL
  SELECT 2, 2 UNION ALL
  SELECT 3, 3 UNION ALL
  SELECT 4, 3 UNION ALL
  SELECT 5, 0 UNION ALL
  SELECT 6, 1
),
matrixMultiplication AS
(
SELECT a.p AS ap, b.p as bp, SUM(a.val * b.val) val
FROM MatrixA AS a
CROSS JOIN MatrixB AS b
GROUP BY a.p, b.p
ORDER BY a.p, b.p
)

--36 elements for the 6x6 PATHS Matrix
--TODO: how to shape it to 6x6 matrix?
SELECT * FROM matrixMultiplication

【问题讨论】:

    标签: matrix google-bigquery


    【解决方案1】:

    如何将其整形为 6x6 矩阵?

    以下是 BigQuery 标准 SQL。几个简单的选项

    选项#1

    #standardSQL
    SELECT ap AS row, STRING_AGG(CAST(val AS STRING), ' ' ORDER BY bp) AS cols
    FROM matrixMultiplication
    GROUP BY row
    -- ORDER BY row   
    

    当应用于您问题中的虚拟数据时 - 结果是

    Row     row     cols     
    1       1       -2 4 6 6 0 2     
    2       2       3 -6 -9 -9 0 -3  
    3       3       -4 8 12 12 0 4   
    4       4       1 -2 -3 -3 0 -1  
    5       5       0 0 0 0 0 0  
    6       6       -2 4 6 6 0 2     
    

    选项 #2

    #standardSQL
    SELECT row, 
      cols[OFFSET(0)] AS col1,
      cols[OFFSET(1)] AS col2,
      cols[OFFSET(2)] AS col3,
      cols[OFFSET(3)] AS col4,
      cols[OFFSET(4)] AS col5,
      cols[OFFSET(5)] AS col6
    FROM (  
      SELECT ap AS row, ARRAY_AGG(val ORDER BY bp) AS cols
      FROM matrixMultiplication
      GROUP BY ap
    )
    -- ORDER BY row    
    

    当应用于您问题中的虚拟数据时 - 结果是

    Row row col1    col2    col3    col4    col5    col6     
    1   1   -2      4       6       6       0       2    
    2   2   3       -6      -9      -9      0       -3   
    3   3   -4      8       12      12      0       4    
    4   4   1       -2      -3      -3      0       -1   
    5   5   0       0       0       0       0       0    
    6   6   -2      4       6       6       0       2    
    

    【讨论】:

      猜你喜欢
      • 2018-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      相关资源
      最近更新 更多