Clickhouse 将多个行向量/数组组合起来作为平均值

问题描述 投票:0回答:1

在 Clickhouse 中,我有一张像这样的桌子:

ID | frame | vector
123, 0, [-0.1,0.3,0.2]
123, 1, [0.3, 0.2, -0.1]
456, 0, [-0.2, 0.1, 0.2]

我想查询这些数据,以便它输出:

ID | avg_vector
123, [0.1, 0.25, 0.05]
456, [-0.2, 0.1, 0.2]

但我发现的函数似乎只提供对数组求平均值,而不是对两个数组求平均值。

我试过:

SELECT
id,
arrayMap(
    i -> arrayReduce('avg', arrayMap(x -> x[i], groupArray(vector))),
    range(3)
) AS avg_vector
FROM embeddings
GROUP BY id

但我相信这适用于每个元素,而不是数组之间

clickhouse
1个回答
0
投票

avgForEach 函数

WITH vectors AS
   (
       SELECT c1 AS vector
       FROM VALUES([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12])
   )
SELECT avgForEach(vector) AS centroid
FROM vectors

┌─centroid──┐
│ [5,6,7,8] │
└───────────┘
© www.soinside.com 2019 - 2024. All rights reserved.