小编Eug*_*osh的帖子

获得给定向量和数据库中向量之间的最小欧几里德距离

我将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)

sql algorithm postgresql math

6
推荐指数
1
解决办法
1306
查看次数

标签 统计

algorithm ×1

math ×1

postgresql ×1

sql ×1