1

python networkx モジュールには、2 つのネットワーク マップをマージするためのメソッド nx.union があります。

C = nx.union(G,H)

ここで、G と H はネットワーク マップであり、C は結合されたバージョンです。すべてのノードを番号で検索し、同じ番号のノードをマージします。

GEXF 形式で保存されたノードの例:

  <node id="0" label="walking">
    <ns0:color b="200" g="11" r="11" />
    <attvalues>
      <attvalue for="0" value="2" />
      <attvalue for="1" value="26" />
    </attvalues>
  </node>

私のマップには任意のノード番号がありますが、各ノード属性には一意のラベルがあるため、これは私にとって問題です。ノード番号を割り当てるとき、リストを調べてリスト インデックスをノード番号として使用するだけですが、map1 の位置 84 に「ウォーキング」があり、map2 の位置 157 に「ウォーキング」がある可能性があるため、ノード番号は簡単ではありません。ノード ラベルに関連付けます。

networkx を使用してネットワーク マップに結合し、ノード ラベル名で一致を指定する方法を知っている人はいますか?

おそらく独自のメソッドを作成する必要がありますが、何かが欠けていないことを確認したかっただけです。union_disjoint() がありますが、同じファイルに 2 つの別々の接続されていないマップが作成されるようで、役に立ちません。

また、2 つ目の networkx の質問: GEXF ファイル形式でノード ラベルのサイズとラベルの色を指定する方法はありますか? GEXF v1.2 ドラフト仕様には記載されていません。

4

1 に答える 1

7

nx.read_gexf(file、relabel = True)を使用してみてください。これにより、GEXFノードラベルがNetworkXノード識別子として使用されます。次に、一方のノードとエッジをもう一方に追加することで、2つのグラフをマージできます。例えば

>>> G = nx.read_gexf(file1, relabel=True)
>>> H = nx.read_gexf(file2, relabel=True)
>>> G.add_nodes_from(H.nodes(data=True))
>>> G.add_edges_from(H.edges(data=True))
于 2012-08-02T14:05:13.590 に答える