Google Cloud: matrix multiplication with Bigquery or some other service?

前端 未结 2 1002
[愿得一人]
[愿得一人] 2021-01-06 21:58

I am using Google Analytics and processing the data with Bigquery, I need to do a matrix multiplication.

What is the most feasible way of implementing matrix mu

2条回答
  •  青春惊慌失措
    2021-01-06 22:24

    Assuming MatrixA is a table with below columns:

    i, k, value   
    

    and MatrixB - has schema as

    k, j, value    
    

    and also assuming that range of k-values is the same in both tables:

    This would mimic below matrices :

    Matrix A
     2 -3  4
    -1  0  2
    
    Matrix B
    -1  2  3
     0  1  7
     1  1 -2
    

    Below code for multiplication is for BigQuery Standard SQL

    #standardSQL
    WITH MatrixA AS (
      SELECT 1 AS i, 1 AS k, 2 AS val UNION ALL
      SELECT 1, 2, -3 UNION ALL
      SELECT 1, 3, 4 UNION ALL
      SELECT 2, 1, -1 UNION ALL
      SELECT 2, 2, 0 UNION ALL
      SELECT 2, 3, 2 
    ), MatrixB AS (
      SELECT 1 AS k, 1 AS j, -1 AS val UNION ALL
      SELECT 1, 2, 2 UNION ALL
      SELECT 1, 3, 3 UNION ALL
      SELECT 2, 1, 0 UNION ALL
      SELECT 2, 2, 1 UNION ALL
      SELECT 2, 3, 7 UNION ALL
      SELECT 3, 1, 1 UNION ALL
      SELECT 3, 2, 1 UNION ALL
      SELECT 3, 3, -2 
    )
    SELECT i, j, SUM(a.val * b.val) val
    FROM MatrixA AS a
    CROSS JOIN MatrixB AS b
    WHERE a.k = b.k
    GROUP BY i, j
    ORDER BY i, j   
    

    result will be as below

    Row i   j   val  
    1   1   1   2    
    2   1   2   5    
    3   1   3   -23  
    4   2   1   3    
    5   2   2   0    
    6   2   3   -7     
    

    which represents MatrixA * MatrixB

    2   5  -23
    3   0   -7
    

    as a note: you can use

    FROM MatrixA AS a
    JOIN MatrixB AS b
    ON a.k = b.k  
    

    instead of

    FROM MatrixA AS a
    CROSS JOIN MatrixB AS b
    WHERE a.k = b.k   
    

    just matter of your preferences

提交回复
热议问题