私はPythonのオープンソースnetworkxパッケージからDiGraph.pyを継承するクラスを書いています。
私のクラスのいくつかのメソッドでは、特定の次数(有向グラフの場合はoutdegreesまたはindegrees)のノードを検索して返す必要があります。
このクラスは、データマイニングプロジェクト\自然言語処理で使用され、非常に大規模なネットワークで使用されます。私が必要としているのは、説明されているメソッドの高速実装です(特定のアウト度または特定のイン度を持つノードのリストを返します)。
スーパークラスにはすでにいくつかの定義があります。1。メソッドnetwork.outdegree()
:ノードキーとoutdegree値を含むディクショナリを返します。
{'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}
- である方法
network.out_degree_iter()
<generator object out_degree_iter at 0x02EEB328>
この方法の使い方がわかりません。誰かがその使い方を説明してくれればありがたいです。
3.ネットワーク内のすべてのノードのリストである属性network.nodesがあります。
質問:たとえば、network.nodesでリスト内包を実行することにより、すべてのノードを反復処理してoutdegree 2のノードを返すことができます。または、辞書を反復処理して値2のノードのリストを返すか、またはout_degree_iter()
これがどのように使用されているのか、またはforループ(dict.iteritems()のfor k、v)で辞書アイテムを反復処理するのとどのように違うのかわかりません。ノードとエッジの非常に大規模なネットワークでは、これらのどれが高速でしょうか。なぜですか。
ありがとう