def brute_radius_search(self, v, radius2=None, batchsize=1024):
v = v.ravel()
norm2 = self.get_dataset('norm2')
v_norm2 = np.sum(v * v)
candidates = []
ids = self.ids[:]
for i in xrange(0, self.num_ids, batchsize):
blockdata = self.data[i:i+batchsize, :]
dists = norm2[i:i+batchsize] + v_norm2 - 2 * np.dot(blockdata, v)
assert dists.ndim == 1
if radius2:
for j in np.flatnonzero(dists < radius2):
candidates.append((dists[j], ids[i+j]))
else:
for j in xrange(dists.shape[0]):
candidates.append((dists[j], ids[i+j]))
candidates.sort()
return candidates
评论列表
文章目录