Кажется, вы продвинулись довольно далеко, и вам нужна помощь, чтобы двигаться вперед.Одна проблема, связанная с тем, как вы прошли сортировку расстояний.Сначала вы создаете массив расстояний, а затем сортируете их, но при этом вы теряете контекстную информацию для каждого расстояния.У вас есть все расстояния, и они отсортированы, но вы не знаете, к каким точкам они относятся.Этот шаг кажется мне ненужным, и вы можете просто остановиться на K
, который является индексами элементов на месте (без потери контекстной информации), имея информацию об их отсортированной позиции.Если вы посмотрите на K
, вы можете заметить, что это матрица 5x20, и, учитывая форму ваших majority_points
и minoirty_points
, (20x2 и 5x2 соответственно), это означает, что K
является 2D матрицейс каждой строкой индексы отсортированного расстояния между данным n
minority_point
всеми m
majority_point
с.
Давайте рассмотрим пример.Первая строка в K
- это
[ 2 6 7 1 3 10 5 8 0 13 11 9 4 12 14 17 16 18 15 19]
, это будет означать, что для первых minority_point
[2, 3]
самые близкие контрольные точки находятся в индексах 2, 6, 7, 1, 3 и т. Д.порядок, который оказывается [1, 3]
[2, 2]
[2, 4]
[1, 2]
и т. д. в этом порядке.Если вы посмотрите, первые 3 - самое короткое расстояние, всего в 1 единице от рассматриваемого minority_point
.(Первое по вертикали, второе по горизонтали.) (Обратите внимание, что алгоритм сортировки размещает как самые близкие, так и первые элементы, как они появляются во входном массиве. Таким образом, индекс 2 предшествует 6 или 7даже если они на одинаковом расстоянии.)
Итак, все, что вам нужно сделать, это создать новый массив, скопировав элементы с первыми 3 индексами для каждой строки в K. Это то же самое, что сказать3 ближайших majority_points
для каждого из minority_points
.
В условных обозначениях это означает просмотр массива majority_points
(вместо копирования всего объекта). Должна работать следующая строка (Iпроверил это):
majority_points[K[:,0:3]]
Это означает, что вы извлекаете элементы из K
(K[]
) из всех строк (первое измерение перед запятой, все из которых являются просто :
,)и первые 3 элемента из второго измерения.Это те показатели, которые вы хотели бы получить с majority_points
.
. Вывод для меня выглядит так:
[[[1 3]
[2 2]
[2 4]]
[[3 2]
[2 2]
[2 4]]
[[2 4]
[3 5]
[4 4]]
[[5 2]
[3 2]
[4 1]]
[[5 3]
[4 4]
[5 2]]]