SQL中的稀疏点积产品

问题描述:

想象一下,我有一张存储一系列稀疏向量的表格。稀疏向量意味着它只在数据结构中明确存储非零值。我可以有一个1百万的维矢量,但我只存储非零维的值。因此,大小与非零项的数量成正比,而不是矢量的维数。SQL中的稀疏点积产品

表的定义是这样的: vector_id:整数 尺寸:整数 值:漂浮

现在,在正常节目的土地,我可以计算在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 = ... 
+0

那么你会如何索引的表?通过(vector_id,dimension)? – 2009-06-29 21:17:08