Я пытаюсь создать функцию, которая генерирует 2D-набор данных. Шаги, которые я хочу сделать с кодом:
- Составьте список из 100 списков, с координатами и классом 0 (для неинициализированных) в каждом списке
- Генерация n случайных координат и установка их классов, список обновлений
- Рассчитать расстояние между точками с классом 0 и точками с назначенными классами. Возьмите сумму 1 / расстояние до точек с классом 1, сумму 1 / расстояние до точек с классом 2 ... и т. Д., И класс этой точки будет классом с наибольшей суммой
Однако приведенный ниже код не работает, когда список точек напечатан, почти все точки по-прежнему имеют класс 0.
import random
def dataset_maker(n): # 2D plane with 0 through 9 for x and y axis
points = []
for i in range(0,10):
for j in range(0,10):
points.append([i, j, "0"]) # 0 = class not initialised, 1 = class 1, 2 = class 2 etc
centriods = []
for i in range(n):
centriods.append((random.randint(0,9), random.randint(0,9)))
for i in range(0,len(points)):
for j in range(0,len(centriods)):
if points[i][0] == centriods[j][0] and points[i][1] == centriods[j][1]:
points[i][2] = str(j+1)
# All neighbours NN to determine classes of other points
distances = [0] * n
for i in range(0,len(points)):
if points[i][2] == "0":
for j in range(0,len(points)):
if points[j][2] != "0":
if((points[i][0] - points[j][0]) ** 2 + (points[i][1] - points[j][1]) ** 2) != 0: # prevent division of 0
tmp = 1 / ((points[i][0] - points[j][0]) ** 2 + (points[i][1] - points[j][1]) ** 2)
tmp2 = int(points[j][2]) - 1
distances[tmp2] += tmp
tmp3 = distances[0]
for i in range(0,len(distances)):
if distances[i] > tmp3:
tmp3 = distances[i]
points[i][2] = str(distances.index(tmp3) + 1)
distances = [0] * n
print(points)
dataset_maker(5)