假设我有一个表,其中存储一系列稀疏向量。稀疏向量意味着它仅在数据结构中显式存储非零值。我可以有一个 100 万维向量,但我只存储非零维度的值。因此,大小与非零条目的数量成正比,而不是向量的维数。
表定义如下: 矢量_id:整数 维度:整数 值: float
现在,在正常的编程领域,我可以在 O(|v1| + |v2|) 时间内计算两个向量的内积或点积。基本上,该算法是存储按维度排序的稀疏向量,并迭代每个维度中的维度,直到发现维度之间的冲突,并将共享维度的值相乘,然后不断相加,直到到达任一向量的末尾.
在 SQL 中实现这一目标的最快方法是什么?
最佳答案
您应该能够在一个查询中复制此算法:
select sum(v1.value * v2.value)
from vectors v1
inner join vectors v2
on v1.dimension = v2.dimension
where v1.vector_id = ...
and v2.vector_id = ...
关于sql - SQL 中的稀疏点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1060458/