Эффективный способ найти точки, смежные с группой точек - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь построить алгоритм типа кластеризации. У меня медленно, и сузили медленность до конкретного метода в моем коде.

Возьмите 2-й массив, состоящий из двух групп, обозначенных как 1 с и 2 с.

Пример:[[1,1,1,0], [1,2,0,0], [0,2,2,0], [0,2,0,0]] Группа 1 состоит из 4 баллов ([0,0], [0,1], [0,2], [1,0]) и группа 2 состоит из 4 разных точек ([1,1], [2,1], [2], 3], [3,1]).

Я хочу составить список значений, которые обозначают каждую группу и не являются частью другой группы, за исключением диагоналей. Это будет ([0,3], [1,2], [2,0]) для группы 1 и ([1,2], [2,0], [3,0], [3,2]], [2,3]) для группы 2.

В настоящее время я беру каждую точку в группе 1, затем проверяю каждую точку рядом с ней. Если рядом с ней нет точки в списке точек контура, нет в другой группе и нет в текущей группе, она добавит эту точку в список точек контура.

Я чувствую, что это действительно неэффективный способ сделать это. Есть ли более эффективный способ построения списка точек контура?

Я использую python, если это важно, хотя меня больше интересует, существует ли вообще более быстрый алгоритм.

...