2016-06-26 9 views
1

グラフツールのグラフの頂点の座標を効率的に指定したいと思います。私はグラフツールの頂点座標

...位置(2.5,3.8)などで1頂点プロットするグラフツールが欲しい

Node,X,Y 

1,2.5,3.8 

2,3.4,2.9 

...

は次のようになりますCSVを考えます

非効率的な解は、 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

私はこれしようとするだろう:graph-toolはnumpyの配列を受け入れる場合そうでない場合は、

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

を:

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

あなたの答えをありがとう!残念ながら両方がうまくいきませんでしたが、私はそれがこの操作を行うときに 'pos'がそのタイプを緩めるためだと考えます。例えば 、私はPOSで電子のため を行う場合: 印刷E 私は 配列([2.5、3.8]) 配列([3.4、2.9]) を取得... – monty47

関連する問題