2017-03-02 77 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])