У меня есть матрица для хранения k минимальных расстояний для N элементов.Всякий раз, когда появляется новый элемент, я хочу вычислить расстояния до всех N элементов, и, если какое-либо расстояние меньше максимального сохраненного расстояния, я хочу обновить это значение и сохранить новое расстояние.Первоначально расстояния установлены на np.inf
.
elems = np.array([[5, 5],[4, 4],[8, 8]])
k=2
center_mindists = np.full((len(elems),k), np.inf)
Поэтому, когда приходит новый элемент, скажем, x=np.array([1,1])
Я должен вычислить расстояние до всех элементов и сохранить его, если оно меньше максимальногорасстояние, сохраненное в то время
distances = np.sum(np.abs(elems - x)) #[8 6 14]
. Для этого я нахожу индексы, где есть максимальное расстояние в каждой строке, а затем выбираю максимальное сохраненное расстояние, которое выше недавно вычисленного расстояния
max_min_idx = np.argmax(center_mindists, axis=1) #[0 0 0]
id0 = np.indices(max_min_idx.shape)
lower_id = distances < centers_mindists[id0, max_min_idx]
Наконец, я должен обновить эти значения новыми:
center_mindists[id0, max_min_idx][lower_idx] = distances[lower_idx[0]]
Дело в том, что назначение не меняет значения в матрице center_min_dists
, и я не смог найтирешение для этого.
Большое спасибо !!