请看一下这段代码:
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,)
。我做错了什么?