我必须在高维(~30000)向量上解一个异或运算来计算汉明距离。例如,我需要计算一个向量与16个向量之间的异或运算,其中每行50'000x30'000矩阵中都有16个零星的True
到目前为止,我发现的最快的方法不是使用scipy.sparse,而是对每行使用简单的^操作
这:
l1distances=(self.hashes[index,:]^self.hashes[all_points,:]).sum(axis=1)
正好比这个快十倍:
sparse_hashes = scipy.sparse.csr_matrix((self.hashes)).astype('bool')
for i in range(all_points.shape[0]):
l1distances[0,i]=(sparse_hashes[index]-sparse_hashes[all_points[i]]).sum()
但是十倍的速度仍然相当慢,因为从理论上讲,拥有16个激活的稀疏向量应该使计算与拥有16维向量相同
有什么解决办法吗?我在这里真的很挣扎,谢谢你的帮助
如果你的向量是高度稀疏的(比如16/30000),我可能会完全跳过对稀疏异或的处理
相关问题 更多 >
编程相关推荐