【问题标题】:iGraph Python, convert edge list to tuple and add.edgesiGraph Python,将边缘列表转换为元组并添加.edges
【发布时间】:2013-10-14 12:20:55
【问题描述】:

我有一个 Graph G1,它有 50 个节点和 100 条边。所有边都被加权。我创建了一个边列表(按预定义的顺序排序,删除具有大值的特定边),它们的索引如下:

Edgelist: [75, 35, 32, 1, ...]

我想以 10 个批次将边添加到不同的图 G2(以节省计算时间),但 add.edges 似乎想要一个顶点对的元组列表。所以,

  1. 如何将上面的 Edge 列表转换为元组列表,例如[(40,2),(10,1),(10,11),(0,0),...]。我用 G1.es[edge].tuple 尝试了一个循环,但是 iGraph 将 [edge] 变量作为属性读取,而如果你只写 G1.es[75].tuple,它可以正常工作。

  2. 如何从 G1 中查找权重并将它们以 10 个为一组添加到 G2 中?

【问题讨论】:

  • “边缘列表”是否是指 G1 的边缘 ID 列表上方?
  • 是的。我已经在我的解决方案下面发布了,但也许有一种方法可以加快速度?
  • 我在下面发布了一个可能的实现作为答案。
  • 谢谢 - 你有用于从边缘 id 生成元组的 R 实现吗?
  • 在 R 中使用 get.edgelist() 获取完整的边列表,然后简单地使用您感兴趣的边的 ID 索引列表。

标签: python igraph edge-list


【解决方案1】:
  1. 您必须注意,使用单个数字索引 G1.es 将返回 Edge 类型的对象,而使用数字列表对其进行索引将返回 EdgeSeq 类型的对象。 Edge 对象有一个名为 tuple 的属性,但 EdgeSeq 对象没有,这就是为什么 G1.es[edgelist].tuple 不起作用但是,您可以这样做:

    sorted_tuples = [edge.tuple for edge in G1.es[edgelist]]
    

    也可以直接从EdgeSeq对象中提取weight属性的值:

    sorted_weights = G1.es[edgelist]["weight"]
    
  2. 这里你可以利用这样一个事实,如果G2有M条边并且你添加了m条额外的边,那么这些新边的ID将在从M(包括)到M+m(不包括)的范围内:

    M = G2.ecount()
    m = len(sorted_tuples)
    G2.add_edges(sorted_tuples)
    G2.es[M:(M+m)] = sorted_weights
    

【讨论】:

    【解决方案2】:

    1) 图 G1 已经删除了不需要的边。 Edgelist 是 G1 的边序。

    tuple_list=[]
    for e in G1.es:
        tuple_list.append(e.tuple)
    
    sorted_tuples=[tuple_list[i] for i in Edgelist]
    sorted_weights = [G1.es['weight'][o] for o in Edgelist]
    

    2) 添加边 - 这可以简单地为 G1 中的所有边循环。下面是前 10 个示例。

    edges_to_add=sorted_tuples[0:10]
    weights_to_add=sorted_weights[0:10]
    
    G2.add_edges(edges_to_add)
    
    for edge in range(len(edges_to_add)):
        G2.es[G2.get_eid(edges_to_add[edge][0],edges_to_add[edge][1],0)]['weight'] = weights_to_add[edge]
    

    边权重是单独添加的,有点慢,但是在iGraph中似乎没有批量添加边权重的方法

    【讨论】:

      猜你喜欢
      • 2021-11-22
      • 2016-10-15
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 2021-10-06
      相关资源
      最近更新 更多