2016-06-26 78 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