Пожалуйста, посмотрите на этот код:
import numpy as np
from scipy.spatial import distance
#1
X = [[0,0], [0,1], [0,2], [0,3], [0,4], [0,5]]
c = [[0,0], [0,1], [0,3]]
#2
dists = distance.cdist(X, c)
print(dists)
#3
dmini = np.argmin(dists, axis=1)
print(dmini)
#4
mindists = dists[:, dmini]
print(mindists)
(# 1) Итак, у меня есть мои данные X
, некоторые другие точки (центроиды) c
, затем (# 2) я вычисляю расстояние от каждой точки в X
до всех центроидов c
, и сохраните результат в dists
.
(# 3) Затем я выбираю индекс минимальных расстояний с помощью argmin
.
(# 4) Теперь я хочу выбрать только значение минимальных значений, используя индексы, вычисленные на шаге № 3.
Однако я получаю странный вывод.
# dists
[[ 0. 1. 3.]
[ 1. 0. 2.]
[ 2. 1. 1.]
[ 3. 2. 0.]
[ 4. 3. 1.]
[ 5. 4. 2.]]
#dmini
[0 1 1 2 2 2]
#mindists
[[ 0. 1. 1. 3. 3. 3.]
[ 1. 0. 0. 2. 2. 2.]
[ 2. 1. 1. 1. 1. 1.]
[ 3. 2. 2. 0. 0. 0.]
[ 4. 3. 3. 1. 1. 1.]
[ 5. 4. 4. 2. 2. 2.]]
Читая здесь и там, кажется возможным выбрать определенные столбцы, дав список целых чисел (индексов). В этом случае я должен использовать значения dmini
для индексации столбцов вдоль строк.
Я ожидал, что mindists
будет в форме (6,)
. Что я делаю не так?