示例#1
0
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