Ejemplo n.º 1
0
def generate_centroids(num_centroids: int, point_list: list, precision: int=3):
    """
    Randomly generate centroids within the bounds of dataset

    :param num_centroids: number of centroids required
    :param point_list: list of Point objects
    :param precision: number of decimal places of precision on location of centroids
    :return: list of randomly generated centroids
    """
    precision = 10 ** precision
    centroid_list = []
    x_vals = [i.x for i in point_list]
    y_vals = [i.y for i in point_list]
    x_max, x_min = max(x_vals), min(x_vals)
    y_max, y_min = max(y_vals), min(y_vals)
    for i in range(num_centroids):
        centroid = Point(random.randrange(int(precision * x_min), int(precision * x_max)) / precision,
                         random.randrange(int(precision * y_min), int(precision * y_max)) / precision)
        centroid.is_centroid = True
        centroid.cluster_id = i
        centroid_list.append(centroid)
        point_list.append(centroid)
    new_centroid_list = check_centroids(centroid_list=centroid_list, point_list=point_list, precision=3)
    return new_centroid_list