2016-06-26 79 views
1

我想以高效的方式在圖形工具中指定圖形頂點的座標。圖形工具中的頂點座標

給定一個CSV它看起來像:

Node,X,Y 

1,2.5,3.8 

2,3.4,2.9 

...

我想圖形工具到頂點1的位置(2.5,3.8)等繪製...

一個非效率的解決方案如下: Explicit vertex position in python graph-tool,所以我基本上可以使用for循環遍歷所有的座標並將它們保存在屬性映射'pos'中。如果我的圖是「G」和我的CSV是在數據幀「座標」用熊貓看書,我可以這樣做:

for i in range(1,numnodes+1): 
    pos[g.vertex(i)] = (coordinates.values[i-1,1],coordinates.values[i-1,2]) 

的問題是,我的節點數目,numnodes大(〜10^7) ,這可能需要一些時間。

是否有更有效的方法來通過直接在屬性圖'pos'中輸入數據來執行此操作?

+0

你可以嘗試以矢量化的方式使用它:'pos = coordinates [['X','Y']]。values'而不是循環?我不知道'graph-tool'模塊,但我想它應該能夠用numpy數組或者甚至可以用熊貓數據幀... – MaxU

回答

0

我發現一個回答我的問題,一個有效的方式做到這一點是使用。 set_2d_array()函數;

pos.set_2d_array(coordinates[['X','Y']].values.T) 

有竅門。 這裏「.T」是轉置函數,是numpy庫的一部分。

0

我想試試這個:

pos = coordinates[['X','Y']].values 

如果graph-tool接受numpy的陣列,否則:

pos = [tuple(t) for t in coordinates[['X','Y']].values] 
+0

感謝您的回答!不幸的是,兩者都沒有工作,我懷疑這是因爲'pos'在做這個操作時失去了它的類型。 例如,如果我爲電子商務做 在POS: 打印E 我得到 陣列([2.5,3.8]) 陣列([3.4,2.9]) ... – monty47