def push_to_b(self, xn, xp, e):
assert self.query(xn, count=False) == self.NEG
assert self.query(xp, count=False) == self.POS
d = distance.euclidean(xn, xp) / \
distance.euclidean(np.ones(self.n_features), np.zeros(self.n_features))
if d < e:
logger.debug('bin search done with %f', d)
return xn, xp
mid = .5 * np.add(xn, xp)
try:
l = self.query(mid)
if l == self.NEG:
return self.push_to_b(mid, xp, e)
else:
return self.push_to_b(xn, mid, e)
except RunOutOfBudget:
logger.debug('Run out of budget %d, push_to_b failed' % self.budget)
raise RunOutOfBudget
评论列表
文章目录