【发布时间】:2017-11-07 22:07:13
【问题描述】:
我有一些来自嵌入人脸的向量,我想将它们存储在数据库中。我需要的是能够在给定引用的嵌入式面部的情况下从数据库中找到相似的向量。
我曾尝试在 Postgres 中使用数组类型,但不支持减法。
- 短期问题是:我们能否在 Postgres 的数据库级别高效地执行数组减法?
- 长期的问题是:对于此类数据和计算是否有更好的数据库系统?
谢谢
--更新--
具体问题是,假设我在一个表中有一些向量数据
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
我想找出这 3 个向量中的哪一个最接近向量 {5, 5, 5}。
需要的操作是先将2个向量相减,然后求出差的长度||{5, 5, 5} - {4, 5, 6}||_2
在我的场景中,一个向量将有 128 个维度。
【问题讨论】:
-
本身不是数据库,但阅读您的任务时,我希望得到类似 kd-trees 或 ball-trees(针对邻居查询进行了优化)之类的东西。但我不知道这在 DB 世界中是否常见(快速浏览 Billy 提到的 PostGIS 看起来很有趣,R-tree)。
-
简短答案是这样的:stackoverflow.com/questions/32446703/… 长答案是这样的:PostGIS,因为它会索引并允许您查询 R-trees,这在技术上更适合最近邻问题,因为最坏的情况是最好的情况O(log(n)),其中 kd-trees 是 O(n) 最坏情况和 O(log(n)) 最好情况。
标签: database postgresql vector machine-learning postgis