【发布时间】:2016-11-11 11:25:37
【问题描述】:
我有一个基向量(由 1 和 0 组成),我想找到到 50,000 个其他向量(也由 1 和 0 组成)的余弦距离。我找到了很多方法来计算整个成对距离矩阵,但我对此不感兴趣。相反,我只想让我的基本向量与其他向量之间的 50,000 距离(然后排序以找到前 5 个)。我能做到这一点的最快方法是什么?
【问题讨论】:
-
那么你是如何计算这个矩阵的?你为什么不只计算每个向量呢?
我有一个基向量(由 1 和 0 组成),我想找到到 50,000 个其他向量(也由 1 和 0 组成)的余弦距离。我找到了很多方法来计算整个成对距离矩阵,但我对此不感兴趣。相反,我只想让我的基本向量与其他向量之间的 50,000 距离(然后排序以找到前 5 个)。我能做到这一点的最快方法是什么?
【问题讨论】:
矢量化操作与单独操作完全相同,只要您小心轴即可。在这里,我在每一行中都有单独的“其他”向量:
others = numpy.random.randint(0,2,(10,10))
base = numpy.random.randint(0,2,(10,1))
d = numpy.inner(base.T, others) / (numpy.linalg.norm(others, axis=0) * numpy.linalg.norm(base))
【讨论】: