【问题标题】:Sample edge attribute in NetworkX using Python使用 Python 在 NetworkX 中示例边缘属性
【发布时间】:2020-05-26 01:27:48
【问题描述】:

我想从我用 networkX 构建的有向图中采样三个边属性。图表中具有“依赖”属性的边如下所示:

import networkx as nx
import random
from random import choice
G=nx.DiGraph()
G.add_edge('x','a', dependency=0.4)
G.add_edge('x','b', dependency=0.6)
G.add_edge('a','c', dependency=1)
G.add_edge('b','c', dependency=0.3)
G.add_edge('b','d', dependency=0.7)
G.add_edge('d','e', dependency=1)
G.add_edge('c','y', dependency=1)
G.add_edge('e','y', dependency=1)

现在我想从上面采样三个不同的边缘属性,并将它们与 0 到 1 之间的随机数相乘。它应该看起来像这样:

for i in range(3):
    sampled_edge = random.sample(G.edges, 1)
    sampled_edge_with_random_number = sampled_edge['dependency'] * random.uniform(0,1)
    print(sampled_edge_with_random_number)

但我不断收到以下错误消息:

TypeError: list indices must be integers or slices, not str

最好的方法是什么?

【问题讨论】:

  • random.sample 仅在您 import random 时有效

标签: python graph networkx


【解决方案1】:

您的脚本中有两个错误。

  1. 什么是random.sample(G.edges, 1)?绝对是包含一个项目的列表,因此它不能成为任何优势的关键。正确的键是sampled_edge[0]
  2. 什么是sampled_edge?如果是列表或元组,则不能有任何键。 唯一应该有一个键的是你的图表的 EdgeView。那么它应该是G.edges

识别出某个边缘后,您也可以访问它的属性。因此,只需在脚本中将 sampled_edge['dependency'] 替换为 G.edges[sampled_edge[0]]['dependency'] 即可。

【讨论】:

  • 感谢您的解释 - 我明白了。并且建议的解决方案也很有效,也感谢您!
猜你喜欢
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
相关资源
最近更新 更多