2017-03-02 103 views
0

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

因此,每个节点都表示为一列,对吗? – Divakar

+0

在这个例子中不应该被忽略吗?为什么忽略0? 0的距离应该被忽略,但是这个的索引是1 ... –

+0

我在说第1项,值为0应该被忽略。正如你所说。 – nycynik

回答

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