Как записать кластеры в файл более эффективно? - PullRequest
1 голос
/ 10 апреля 2019

это довольно глупый вопрос, но в основном мои данные разбиты на разные кластеры с использованием k-средних, это для классного проекта, кстати. У меня все работает, но я должен записать свои кластеры в файл для каждого входа, чтобы его можно было проверить. Мой настоящий код занимает около 2-3 минут, но для записи в файл требуется около 10 минут. У меня есть 10000 входов / выходов, и в настоящее время мое время выполнения составляет около n ^ 3. Время не имеет большого значения для задания, но я хотел знать, может ли кто-нибудь помочь мне оптимизировать его, я знаю, что существуют разные приемы итерации Python, о которых я не знаю, которые могли бы ускорить это.

Мой k равен 10, поэтому у меня 10 центроидов, в основном я выбираю массив и выбираю один из центроидов, проверяю, есть ли в нем массив, если нет, я перехожу к следующему и так далее. Я делаю это для каждого ввода 10000, что занимает много времени. Код не очень эффективен

file = open("image.txt", "w")
    for point in array:
        for x in range(len(centroids)):
            for i in centroids[x]:
                if np.array_equal(point,i):
                    file.write(str(x+1)+"\n")
    file.close()

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Эта строка плохая идея:

for point in array:

Почему итерирует по точкам, чтобы найти центроиды?

Просто выведите их по индексу и только итерируйтенад центроидами.

0 голосов
/ 10 апреля 2019

Хорошо, позвольте мне попробовать кое-что почистить.Прокомментируйте и дайте мне знать, если что-то, что я говорю, неприменимо.Кроме того, если вам нужно все проверить, то вы не сможете упростить вычисления.

with open("image.txt", "w") as file:
   for point in array:
      for centroid_index, centroid in enumerate(centroids):
         for centroid_point in centroid:
            if np.array_equal(point,centroid_point):
               file.write(str(centroid_index+1)+"\n")

Если бы вы могли объяснить типы объектов array, centroids и то, что вы пытаетесьнапишите мне в файл, тогда я мог бы дать более конкретные методы.

...