我将PostgreSQL表中的128D向量存储为double precision []:
create table tab (
id integer,
name character varying (200),
vector double precision []
)
Run Code Online (Sandbox Code Playgroud)
对于给定的向量,我需要从数据库返回一条记录,该向量与表条目中的向量之间的最小欧氏距离.
我有一个函数,根据已知公式SQRT计算两个向量的欧几里德距离((v11-v21)^ 2 +(v1 [2] -v2 [2])^ 2 + .... +(v1 [128 ] -v2 [128]])^ 2):
CREATE OR REPLACE FUNCTION public.euclidian (
arr1 double precision [],
arr2 double precision [])
RETURNS double precision AS
$ BODY $
select sqrt (SUM (tab.v)) as euclidian from (SELECT
UNNEST (vec_sub (arr1, arr2)) as v) as tab;
$ BODY $
LANGUAGE sql IMMUTABLE STRICT
Run Code Online (Sandbox Code Playgroud)
辅助功能:
CREATE …Run Code Online (Sandbox Code Playgroud)