我有一个numpy 2D数组,表示图表上节点之间的距离。我想,对于单个节点,获取按最短距离排序的连接节点列表,我该怎么做?
# create some data
distances = np.array([[0., 1., 2., 3.], [1.,0.,5.,7.], [2.,5.,0.,4.], [3.,7.,4.,0.]])
# get just the node I care about, 1
closest_to_node = distances[:,1]
print (closest_to_node)
# outputs [ 1. 0. 5. 7.]
我想按距离订购closest_to_node
,但我知道它与哪个节点相关的唯一方法是数组中的顺序。
我想要一个[1,0,2,3]
或更好的列表,因为在这种情况下,第1项(值0)毫无意义[1,2,3]
答案 0 :(得分:2)
你可以做的IIUC -
((distances - closest_to_node[:,None])**2).sum(0).argsort()
Alernatively,Scipy's cdist
-
from scipy.spatial.distance import cdist
idx = cdist(distances, closest_to_node[None]).argsort(0).ravel()
给定样本的输出 -
In [147]: ((distances - closest_to_node[:,None])**2).sum(0).argsort()
Out[147]: array([1, 0, 2, 3])
In [148]: cdist(distances, closest_to_node[None]).argsort(0).ravel()
Out[148]: array([1, 0, 2, 3])