我想将每一行乘以一个指定的行,然后将每一行的乘积相加(一个点积)。我的 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 服务器中。如何以有效的方式计算 table * 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 |
+--------+------+-------+------+---+--------+------+
非常感谢!