def getCentroid(attribute_variants, comparator, sort_values=None): """ Takes in a list of attribute values for a field, evaluates the centroid using the comparator, & returns the centroid (i.e. the 'best' value for the field) """ n = len(attribute_variants) distance_matrix = numpy.zeros([n, n]) # populate distance matrix by looping through elements of matrix triangle for i in range(0, n): for j in range(0, i): distance = comparator(attribute_variants[i], attribute_variants[j]) distance_matrix[i, j] = distance_matrix[j, i] = distance average_distance = distance_matrix.mean(0) # there can be ties for minimum, average distance string min_dist_indices = numpy.where( average_distance == average_distance.min())[0] if len(min_dist_indices) > 1: centroid = breakCentroidTie(attribute_variants, min_dist_indices, sort_values=sort_values) else: centroid_index = min_dist_indices[0] centroid = attribute_variants[centroid_index] return centroid
def getCentroid(attribute_variants, comparator): """ Takes in a list of attribute values for a field, evaluates the centroid using the comparator, & returns the centroid (i.e. the 'best' value for the field) """ n = len(attribute_variants) distance_matrix = numpy.zeros([n,n]) # populate distance matrix by looping through elements of matrix triangle for i in range (0,n): for j in range (0, i): distance = comparator(attribute_variants[i], attribute_variants[j]) distance_matrix[i,j] = distance_matrix[j,i] = distance average_distance = distance_matrix.mean(0) # there can be ties for minimum, average distance string min_dist_indices = numpy.where(average_distance==average_distance.min())[0] if len(min_dist_indices) > 1: centroid = breakCentroidTie(attribute_variants, min_dist_indices) else : centroid_index = min_dist_indices[0] centroid = attribute_variants[centroid_index] return centroid