0
我以Nx2
排列的唯一點開始,然後找到這些點的Delaunay edges
,由索引到points
組成的Mx2
數組。還有一個Mx1
對應於每個邊的權重陣列。更快的圖結構生成
我想將數據轉換爲Hetland的書籍「Python算法 - 掌握Python語言中的基本算法」的清單2.3中描述的結構。結構是:
a, b, c, d, e, f, g, h = range(8)
G = [
{b:2, c:1, d:3, e:9, f:4}, # a
{c:4, e:3}, # b
{d:8}, # c
{e:7}, # d
{f:5}, # e
{c:2, g:2, h:2}, # f
{f:1, h:6}, # g
{f:9, g:8} # h
]
其中G[a]
返回邊緣入射到點a
和G[a][b]
返回邊緣的a
和b
之間的重量。
轉換的目標是能夠使用本書中描述的一些快速遍歷等算法。爲了將現有的數據結構和該結構之間的轉換,我做的:
def make_graph(points, edges, weights):
G = []
for i in range(len(points)):
w = numpy.where(edges == i)
d = {}
for ind,j in enumerate(edges[w[0],~w[1]]):
d[j] = weights[w[0][ind]]
G.append(d)
return G
這是相當費時的大集(即大概需要40秒> 15000個頂點),併成爲在代碼中的瓶頸。我怎樣才能更快地將數據結構G
轉換成?
編輯:
僅供參考,使用matplotlib.delaunay.delaunay()
輸出中心,邊緣,三角形和鄰居,這可能是有用的。但是,我還沒有想到如何將它們用於此目的。
你說得對,我有一堆不必要的複雜步驟。這減少了足夠的時間,使其他事情成爲瓶頸。 – Benjamin 2012-07-25 18:59:44
如果圖形是無向的,還應該添加G [e [1]] [e [0]] =權重[i]。 – Benjamin 2012-07-26 13:17:04