gpt4 book ai didi

sql - Postgres 中的向量(数组)加法

转载 作者:行者123 更新时间:2023-11-29 11:27:20 27 4
gpt4 key购买 nike

我有一个包含 numeric[] 值的列,这些值都具有相同的大小。我想取他们的元素平均数。我的意思是平均

{1, 2, 3}, {-1, -2, -3}, and {3, 3, 3}

应该是 {1, 1, 1}。同样令人感兴趣的是如何对这些元素进行求和,尽管我希望任何一种解决方案都将是另一种解决方案。

(注意:数组的长度在单个表中是固定的,但表之间可能会有所不同。所以我需要一个不假定特定长度的解决方案。)

我最初的猜测是我应该以某种方式使用 unnest,因为应用于 numeric[] 列的 unnest 会展平所有数组.所以我认为有一种很好的方法可以将其与某种窗口函数 + group by 结合使用,以挑选出每个数组的各个组成部分并对它们求和。

-- EXAMPLE DATA
CREATE TABLE A
(vector numeric[])
;

INSERT INTO A
VALUES
('{1, 2, 3}'::numeric[])
,('{-1, -2, -3}'::numeric[])
,('{3, 3, 3}'::numeric[])
;

最佳答案

我编写了一个扩展程序,可以使用快速 C 函数进行矢量加法(以及减法、乘法、除法和幂运算)。你可以找到它on GithubPGXN .

给定两个数组 ab 你可以说 vec_add(a, b)。您还可以将任一侧添加到标量,例如vec_add(a, 5)

如果您想要一个 SUM 聚合函数,您可以在 aggs_for_vecs 中找到它, 也在 PGXN .

最后如果你想求和单个数组的所有元素,你可以使用aggs_for_arrays (PGXN)。

关于sql - Postgres 中的向量(数组)加法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26388659/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com