You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clickhouse中如何对多行数组向量求均值合并

ClickHouse 多数组按位置求均值实现方案

你要实现的是按ID分组,对每个ID下的所有vector数组按对应位置计算均值,你原来的SQL思路其实是正确的,这里提供两种更简洁灵活的实现方式:

方法一:arrayZip + arrayMap(推荐)

这种写法更直观,利用arrayZip把同位置的元素聚合为子数组,再逐个计算均值:

SELECT
    id,
    arrayMap(sub_array -> avg(sub_array), arrayZip(groupArray(vector))) AS avg_vector
FROM embeddings
GROUP BY id

执行逻辑:

  • groupArray(vector) 将同一ID下的所有vector合并成二维数组,比如ID=123会得到 [[-0.1,0.3,0.2], [0.3,0.2,-0.1]]
  • arrayZip(...) 把二维数组按位置打包,生成 [[-0.1,0.3], [0.3,0.2], [0.2,-0.1]]
  • arrayMap(...) 对每个打包后的子数组计算均值,最终得到目标平均向量

方法二:优化你的原有写法(动态适配数组长度)

你原来的代码可以改成动态获取数组长度,不用硬编码range(3),适配不同长度的vector:

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

执行逻辑:

  • length(vector) 自动获取数组长度,避免写死数字
  • 内层arrayMap(x -> x[i], ...) 提取所有vector的第i个元素组成数组
  • arrayReduce('avg', ...) 计算该数组的均值,按位置生成最终的平均向量

这两种方法都能输出你需要的结果,方法一的可读性更强。

内容的提问来源于stack exchange,提问作者Dojo Nik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:40:13