一連のスパース ベクトルを格納するテーブルがあるとします。スパース ベクトルとは、ゼロ以外の値のみを明示的にデータ構造に格納することを意味します。100 万次元のベクトルを持つこともできますが、ゼロ以外の次元の値のみを保存します。したがって、サイズはベクトルの次元ではなく、ゼロ以外のエントリの数に比例します。
テーブル定義は次のようになります: vector_id : int ディメンション : int 値 : float
現在、通常のプログラミングの世界では、2 つのベクトルの内積または内積を O(|v1| + |v2|) 時間で計算できます。基本的に、アルゴリズムは、次元ごとに並べ替えられたスパース ベクトルを格納し、次元間の衝突が見つかるまでそれぞれの次元を反復処理し、共有次元の値を乗算し、いずれかのベクトルの最後に到達するまでそれらを加算し続けることです。 .
SQLでこれを実現する最速の方法は何ですか?