Google cloud platform 谷歌云:矩阵乘法与Bigquery还是其他服务?

Google cloud platform 谷歌云:矩阵乘法与Bigquery还是其他服务?,google-cloud-platform,google-bigquery,matrix-multiplication,Google Cloud Platform,Google Bigquery,Matrix Multiplication,我正在使用Google Analytics并使用Bigquery处理数据,我需要做一个测试 在谷歌云中实现矩阵乘法最可行的方法是什么?可以直接在Bigquery中完成吗 假设MatrixA是一个包含以下列的表: i, k, value MatrixB-的模式为 k, j, value 同时假设两个表中的k值范围相同: 这将模拟以下矩阵: Matrix A 2 -3 4 -1 0 2 Matrix B -1 2 3 0 1 7 1 1 -2 下面的乘法代

我正在使用Google Analytics并使用Bigquery处理数据,我需要做一个测试

在谷歌云中实现矩阵乘法最可行的方法是什么?可以直接在Bigquery中完成吗


假设MatrixA是一个包含以下列的表:

i, k, value   
MatrixB-的模式为

k, j, value    
同时假设两个表中的k值范围相同:

这将模拟以下矩阵:

Matrix A
 2 -3  4
-1  0  2

Matrix B
-1  2  3
 0  1  7
 1  1 -2
下面的乘法代码用于BigQuery标准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   
结果如下

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     
它代表矩阵x*矩阵x

2   5  -23
3   0   -7
请注意:您可以使用

FROM MatrixA AS a
JOIN MatrixB AS b
ON a.k = b.k  
而不是

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

只需考虑您的偏好

假设一个矩阵有两列,一个路径列和一个值列。您希望获得邻接矩阵
P^t
。对于6条路径,您需要得到36个值或6x6矩阵,可以通过矩阵乘法来完成

我重构了一个路径邻接矩阵的例子,给出了一些元组
(路径,值)
。演示包含6条路径,因此生成的邻接矩阵的维数为6x6。它现在是一个直接的格式,但我想把它转换成矩阵格式或交叉表格式,使用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

现在的成形问题是将直表成形为更传统的矩阵乘法格式。

假设有矩阵
p:=(Path,val)
,其转置
p^t=(val,Path)
和矩阵乘法
M:=p^t
。您将如何实现这一点?您使用交叉连接,然后使用
a.Path=b.Path
进行连接?好的,我得到+1,您如何将直线表36x1重新格式化为6x6格式?有什么现成的命令吗?我提供了下面的演示,重构了您的示例。BigQuery中没有这样的命令或函数,但是您可以在这里找到相关的问题/答案。用法:枢轴、转置等。我记得我回答了很多类似的问题。如果仍然是一个问题-发布新问题-不是关于乘法矩阵(如回答的那样),而是关于旋转/转置。但正如我所说的,你应该能够找到已经给出的答案。顺便说一下,如果适用的话,请考虑接受答案:O)你可以看到一个新的问题:把矩阵乘法的直线表变成更传统的矩阵乘法格式。对不起,你问过吗?只是问问