私は埋め込み面からいくつかのベクトルを持っており、それらをデータベースに保存したいと思います。私が必要とするのは、参照された埋め込み面を与えられたデータベースから同様のベクトルを見つけることができることです。ベクトルデータをPostgresに格納する効率的な方法は何ですか?
私はPostgresで配列型を使用しようとしましたが、引き算のサポートはありません。
- 短期的な質問は、Postgresのデータベースレベルで効率的に配列減算を行うことができますか?
- 長期的な質問は、このタイプのデータと計算に適したデータベースシステムがあるかどうかです。
特定の問題があるおかげで
--Update--
、私はこれらのどちらを把握したい、私はテーブルに
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
をいくつかのベクターデータがあるとし3つのベクトルはベクトル{5, 5, 5}
に(ユークリッド距離で)最も近い。必要
操作は私のシナリオの違い||{5, 5, 5} - {4, 5, 6}||_2
の長さを見つけるために、次に、2つのベクトルを減算する最初のものである、ベクトルは128次元を有することになります。
DB自体ではありませんが、あなたのタスクを読んで、KDツリーやボールツリー(ネイバークエリに最適化されています)が必要です。しかし、それはDB世界で一般的なものなのかどうか分かりません(PostGISはRツリーのように面白そうです)。 – sascha
短い答えは次のとおりです。https://stackoverflow.com/questions/32446703/find-closest-vector-from-a-list-of-vectors-python 長い答えはこれです:PostGISはインデックスを作成してO(log(n))で最悪の場合が最良であるように、最近傍問題に対して技術的に優れているR-treeを照会する。ここでk-treeはO(n)最悪ケース、O(log(n) 。 –