【问题标题】:What is an efficient way to store vector data in Postgres?在 Postgres 中存储矢量数据的有效方法是什么?
【发布时间】:2017-11-07 22:07:13
【问题描述】:

我有一些来自嵌入人脸的向量,我想将它们存储在数据库中。我需要的是能够在给定引用的嵌入式面部的情况下从数据库中找到相似的向量。

我曾尝试在 Postgres 中使用数组类型,但不支持减法。

  1. 短期问题是:我们能否在 Postgres 的数据库级别高效地执行数组减法?
  2. 长期的问题是:对于此类数据和计算是否有更好的数据库系统?

谢谢

--更新--

具体问题是,假设我在一个表中有一些向量数据

{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


【解决方案1】:

您似乎想使用 PostGIS,它是 PostgresQL 的一个简单扩展,它允许一大堆几何数据类型扩展。 (点、向量、弧等)

【讨论】:

  • 我会调查的
  • 如果您对问题陈述提供更准确的描述,我可以提供更多帮助。
【解决方案2】:

将其转换为字符串。或者您可以定义自定义数据类型并存储值

join(str(s) for s in encodings[0][0:64])

【讨论】:

    猜你喜欢
    • 2019-03-05
    • 1970-01-01
    • 2010-09-24
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多