4

各行に指定された 1 つの行を掛けてから、各行の積を合計します (ドット積)。私の SQL テーブルは、名前と関連する高次元ベクトルのリストです。テーブルには、1 つの文字列 + 1000 の数値列があります。通常、数百万行あります。ベクトル/配列の各フロートは新しい列にあります:

+--------+------+-------+------+---+--------+
|  NAME  | COL0 | COL1  | COL2 | … | COL999 |
+--------+------+-------+------+---+--------+
| TOPAZ  | 0.73 | 0.77  | 0.15 |   | 0.55   |
| GARDEN | 0.41 | 0.57  | 0.61 |   | 0.00   |
| HAVE   | 0.40 | 0.32  | 0.23 |   | 0.52   |
+--------+------+-------+------+---+--------+

配列計算では、これは単にsum(table * row, axis=1). これは大きな配列であり、C で記述され、純粋なメモリに存在する場合、実行に数秒かかるため、速度が非常に重要です。しかし、現在はローカル メモリに格納するには大きすぎて、データは SQL サーバーに存在する必要があります。テーブル * GARDEN を効率的に計算して、すべての行のドット積を GARDEN で取得するにはどうすればよいですか (以下の出力例)。

+--------+------+-------+------+---+--------+------+
|  NAME  | COL0 | COL1  | COL2 | … | COL999 | DOT  |
+--------+------+-------+------+---+--------+------+
| TOPAZ  | 0.57 | 0.24  | 0.34 |   | 0.21   | 0.46 |
| GARDEN | 0.42 | 0.43  | 0.12 |   | 0.66   | 0.48 |
| HAVE   | 0.31 | 0.37  | 0.30 |   | 0.47   | 0.40 |
+--------+------+-------+------+---+--------+------+

どうもありがとう!

4

1 に答える 1