def interp_target_rank_recall(cmc, target_rank): if(target_rank < cmc[0][0] or target_rank > cmc[0][-1]): print 'target_fpr out of bound, will return -1' return -1.0 # This interpolation might be the one that MegaFace officially uses # for i, fpr in enumerate(cmc[0]): # if fpr > target_rank: # return cmc[1][i] # linear interpolation for i, rank in enumerate(cmc[0]): if rank > target_rank: break if cmc[0][i - 1] == target_rank: target_recall = cmc[1][i - 1] else: target_recall = linear_interp(target_rank, cmc[0][i - 1], cmc[0][i], cmc[1][i - 1], cmc[1][i] ) # NN interpolation # target_recall = nearest_neighbor_interp(target_rank, cmc[0], cmc[1]) return target_recall
def test_linear_interp(self): x = np.arange(0,10,1) y = 2*x self.assertEqual(interp.linear_interp(x,y,2), 4) self.assertEqual(interp.linear_interp(x,y,2.5), 5) self.assertRaises(Exception,interp.linear_interp,x,2,2) #check that passing an int raises an error