PythonでオープンソースのnetworkxパッケージからDiGraph.pyを継承したクラスを作成しています。DiGraph networkxの大規模なネットワークインスタンスで最も速いのは何ですか?
私のクラスのいくつかのメソッドでは、特定の度数(有向グラフの場合はoutcomeまたはindegrees)のノードを検索して返す必要があります。
このクラスは、データマイニングプロジェクト\自然言語処理で使用され、非常に大きなネットワークで使用されます。私が必要とするのは、記述されたメソッドの速い実装です(ある程度のノードまたはある程度のノードのリストを返します)。
すでにスーパークラスで定義されていることがいくつかあります。 1.メソッドnetwork.outdegree()
: は、ノードキーとアウトデュレーション値を持つ辞書を返します。私はこの方法を使用する方法がわからない
<generator object out_degree_iter at 0x02EEB328>
network.out_degree_iter()である
{'school': 4, 'middle school': 0, 'university': 0, 'commercial': 0, 'private': 5, 'institution': 2, 'high school': 0, 'college': 0, 'elementary school': 0, 'central': 0, 'company': 0, 'public': 3, 'bank': 2}
- 方法は、誰かがそれを使用する方法を説明することができた場合、 私は感謝するでしょう。
3.私の属性network.nodesは、ネットワーク内のすべてのノードのリストです。
質問:たとえば、network.nodesでリストの理解を行うことで、すべてのノードを反復してoutdegree 2を返すことができます。または、辞書を繰り返して、値2、あるいは、私はそれがどのように使われているのかわからない
out_degree_iter()
を使うか、forループの辞書項目を反復するのとどのように違うのですか?(dict.iteritems()のk、v)??ノードとエッジとの非常に大きなネットワークでは、どちらの方が高速でしょうか?あなたは辞書のコピーを作成していないので、おかげ
ジェネレータオブジェクトがイテレータであるいくつかのタイミングであり、それは、forループで使用されるべきです。例えばin network.out_degree_iter()の場合:aを出力します。 list(network.out_degree_iter())はリストをジェネレータから生成する必要があります。 – BatchyX
プロジェクトのサイズによっては、すべてのデータが使用可能なメモリに収まるかどうかを考慮する必要があります。データの一部を取得するためにページングする必要が生じた場合、それはかなりのオーバーヘッドをもたらす可能性があります。残念ながら、私はDiGraphクラスについて十分に知りません。 – mklauber