我正在尝试使用 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"
您需要将正确的边缘属性名称传递给距离方法的权重参数:
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)