Clickhouse - 矩阵逐项加法:如何对二维数组求和?

Posted

技术标签:

【中文标题】Clickhouse - 矩阵逐项加法:如何对二维数组求和?【英文标题】:Clickhouse - Matrix entrywise addition: how to sum 2 dimensional arrays? 【发布时间】:2020-07-09 11:49:23 【问题描述】:

使用 Clickhouse 数据库计算表中矩阵的逐项总和的正确和最快的方法是什么?

我找到了这样的解决方案。但在我看来,这还不够理想。 还有一个,我需要为一维的每个元素指定 sumForEach()。

select array(sumForEach(matrix[1]), sumForEach(matrix[2])) from (
 select 1 as id, [[1,3], [2,4]] as matrix
 union all
 select 2 as id, [[2,4], [3,5]] as matrix
 union all
 select 3 as id, [[1,2], [1,0]] as matrix
)

因此,我希望看到一行带有结果矩阵

┌─m─────────────┐
│[[4,9],[6,9]]  │
└───────────────┘

【问题讨论】:

【参考方案1】:

Aggregate function combinators可以多次使用,有助于简化查询:

SELECT sumForEachForEach(matrix)
FROM 
(
    SELECT 
        1 AS id, 
        [[1, 3], [2, 4]] AS matrix
    UNION ALL
    SELECT 
        2 AS id, 
        [[2, 4], [3, 5]] AS matrix
    UNION ALL
    SELECT 
        3 AS id, 
        [[1, 2], [1, 0]] AS matrix
)
/*
┌─sumForEachForEach(matrix)─┐
│ [[4,9],[6,9]]             │
└───────────────────────────┘
*/

【讨论】:

哦!非常感谢你!原来如此简单优雅......但从码头上很难理解这种组合

以上是关于Clickhouse - 矩阵逐项加法:如何对二维数组求和?的主要内容,如果未能解决你的问题,请参考以下文章

[CUDA]CUDA编程实战三——矩阵加法的实现

三维矩阵的运算规则是怎么样的? 包括加法,减法,乘法

定义一个Matrix类,实现矩阵的加法和乘法

内存是矩阵加法(SIMD 指令)的瓶颈吗?

矩阵运算(二维数组)

如何加快稀疏数组加法