从 igraph 中的 dict 访问不同的权重 - python

问题描述 投票:0回答:1

我正在尝试使用 igraph 返回单个节点与其他节点列表之间的距离。当我使用单一重量时效果很好。但我想向边缘添加各种权重,并能够在图中使用不同的权重值。

通过单个重量即可正常工作:

nxG = nx.MultiDiGraph()
nxG.add_weighted_edges_from(edges)

g = ig.Graph.from_networkx(nxG)

g.distances(source=nodes, weights='weight')[0]

但是,如果我将多个权重作为字典添加到边缘,如下所示:

{'weight': 1, 'weight2': 5, 'weight3': 10}

我可以直接通过以下方式访问它们:

print(g.es['weight'][0]['weight2']) = 5

但是当我将相同的调用插入到函数中时,我返回了错误?

g.distances(source=nodes, weights=g.es['weight'][0]['weight2'])

出:

TypeError: unhandled type"
python igraph
1个回答
0
投票

您需要将正确的边缘属性名称传递给距离方法的权重参数:

nxG = nx.MultiDiGraph()
nxG.add_edges_from([(0, 1, {'weight': 1, 'weight2': 5, 'weight3': 10})])
g = ig.Graph.from_networkx(nxG)

此后,当你想使用特定权重时,你需要直接使用边缘属性:

distances = g.distances(source=nodes, weights='weight2')

如果您想使用未存储为属性的自定义权重,则需要直接传递它们:

custom_weights = [edge['weight2'] for edge in g.es]
distances = g.distances(source=nodes, weights=custom_weights)
© www.soinside.com 2019 - 2024. All rights reserved.