1

名前しかない特定の頂点とエッジに新しい属性値を追加しようとしました。

g = Graph()
g.add_vertices(["1","2","3"])
g.add_edges([("1","2"),("2","3")])

特定の頂点とエッジに属性を追加する最良の方法は何ですか?

私は以下を見つけましたが、これは不必要な冗長のようです:

g.vs.find(name="1")["attribute"] = "value"
g.get_eid(g.vs.find(name="1").index, g.vs.find(name="2").index)

あなたができないことは、私が試した次のとおりです

g.vs["1"] # -> would return the attribute list if there would be an attribute "1"
g.get_eid("1","2") # needs integers...

エッジと頂点を名前で参照するより良い方法はありますか?

[背景: 最初にグラフを順番に作成しようとしましたが (名前ごとに各頂点 ID を知っています)、スケーリングしませんでした (add_edge は O(n²) 動作をしているようです)。しかし今、頂点 ID がわからず、エッジ属性を割り当てることができません。現在の add_edges() 呼び出しは itertools 機能の混乱であるため、事前に各属性リストを構築したくありません]

4

1 に答える 1

0

最も簡単なのは、名前から頂点 (またはエッジ) にリンクするための逆辞書を作成することです。

n2id = dict(zip(graph.vs["name"],[v.index for v in graph.vs]))
name = "J. Smith" # name of the vertices you are interested in
neighbors = graph.neighborhood(n2id[name], order=1)
于 2013-10-06T13:04:18.797 に答える