获取按最短距离排序的已连接节点列表

时间:2017-03-02 18:51:44

标签: python numpy

我有一个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]

1 个答案:

答案 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])