def reduce_distmat(full_dist_mat,
gal_templateids,
probe_templateids,
reduce_type=ReduceType.MeanMin):
# Get unique template indices and there positions for keeping initial order
#gal_tuids,gal_tuind=np.unique(gal_templateids,return_index=True)
#probe_tuids,probe_tuind=np.unique(probe_templateids,return_index=True)
gal_tuids, gal_tuind = np.unique(
[str(x) for x in gal_templateids], return_index=True)
probe_tuids, probe_tuind = np.unique(
[str(x) for x in probe_templateids], return_index=True)
red_dist_mat = np.zeros((len(gal_tuids), len(probe_tuids)))
# Loop on gallery
for g, gtupos in enumerate(gal_tuind):
gutid = gal_templateids[gtupos]
gt_pos = np.where(gal_templateids == gutid)[0]
# Loop on probe
for p, ptupos in enumerate(probe_tuind):
putid = probe_templateids[ptupos]
pt_pos = np.where(probe_templateids == putid)[0]
# Get appropriate distance
#print g,p
dist_val = 0.0
# TO BE FIXED
if reduce_type == ReduceType.MeanMin:
dist_val = np.mean(np.min(full_dist_mat[np.ix_(gt_pos, pt_pos)]))
else:
dist_val = np.amin(full_dist_mat[np.ix_(gt_pos, pt_pos)])
red_dist_mat[g, p] = dist_val
return red_dist_mat, gal_tuind, probe_tuind
评论列表
文章目录