Во-первых, вам нужно решить, какой тип дистрибутива нужен. Скажем, это гаусс, поэтому мы можем использовать random.gauss
.
Я не создаю функцию, которая генерирует 2D-точку с распределением Гаусса:
def generate_point(mean_x, mean_y, deviation_x, deviation_y):
return random.gauss(mean_x, deviation_x), random.gauss(mean_y, deviation_y)
Затем определите, сколько кластеров, сколько точек на кластер и какое отклонение использовать для кластеров и точек внутри кластера. Например:
cluster_mean_x = 100
cluster_mean_y = 100
cluster_deviation_x = 50
cluster_deviation_y = 50
point_deviation_x = 5
point_deviation_y = 5
number_of_clusters = 5
points_per_cluster = 50
Затем сгенерируйте кластерные центры:
cluster_centers = [generate_point(cluster_mean_x,
cluster_mean_y,
cluster_deviation_x,
cluster_deviation_y)
for i in range(number_of_clusters)]
Затем сгенерируйте действительные точки для каждого кластера:
points = [generate_point(center_x,
center_y,
point_deviation_x,
point_deviation_y)
for center_x, center_y in cluster_centers
for i in range(points_per_cluster)]