長い間考えた後、私は最終的にこの質問をここに投稿することにしました。数日前、私graph-tool
はさまざまなことをするために使い始めました。その前から使っていNetworkx
ます。私はすでに印象的なパフォーマンス比較を見て、すべてが十分に単純であると考えました. しかし、すぐに速度の問題に遭遇し、その特定の側面に関連する質問をしました. 納得のいく迅速な回答を頂きました。ただし、現在、この速度の問題は時々私を悩ませており、ドキュメントが見つかりませんgraph-tool
それはそれを効率的に使用することに関連しています。たとえば、私の最後の質問への回答から、注意すべき非常に重要なポイントですが、どこにも言及されていない 1 つずつではなく、すべてのエッジを一緒に追加する方が良いことに気付きました! 私は今、さらに2つの同様の問題を抱えています:
(1) 特定のノードのランダムな隣人を選択するにはどうすればよいですか? 次の解決策しか表示されません。
nbr = np.random.choice(list(v.all_neighbours()))
はv.all_neighbours()
ジェネレーターであるため、ランダムな要素を選択するには、リストに変換する必要があります。これによりコードが遅くなりますが、これ以上の方法はありません。
(2) グラフの各頂点に 1d ベクトル (大丈夫ですか?) を割り当てたいのですがlist
、後でそれらを特定の方法で交換および変更しています。これは単なるプロパティ マップであり、これを効率的に使用する方法についてのドキュメントを参照したいと思います。しかし、私は何も見つけることができません。
(3)時間とともに変化するネットワークでトライアディック クロージャをシミュレートしようとしています。したがって、すべてのタイム ステップで、グラフ内の各頂点の近傍に関する情報が必要です。ここでも、リスト (または numpy 配列) を作成する必要があります。
nbrs = [w for w in v.neighbours()]
これにより、コードの速度が大幅に低下します。これは、私がこれを正しく行っていないことを意味しますが、グラフツールで隣人を効率的に使用する方法を教えてくれるドキュメントが見つかりませんでした。
どういうわけかNetworkx
、同じタスクのために私が書いたプログラムは、グラフツールのコードよりも完全に優れていて、これを買うことはできません.
このリストは増える可能性があるため、上記の特定の質問への回答とは別に、graph-tool の効率的な使用に関するドキュメントを誰かが教えてくれたら、とてもうれしいです。
前もって感謝します。