创建图形时获得边缘权重



假设我们有一个带有边缘的列表,我们用igraph的图表创建:

links = [[1, 2], [1, 3], [2, 4], [1, 2]]
g = ig.Graph()
for link in links:
    g.add_vertices(link)
g.add_edges(links)
print(g)
# IGRAPH UN-- 8 4 --
# + attr: name (v)
# + edges (vertex names):
# 2--1, 2--3, 1--2, 2--1

2 -- 1重复。如何创建图形以获得边缘权重?

根据IGRAPH文档,可以重复边缘,因此,如果您不想要边缘复制品,则需要自己删除它们。

此代码显示如何将权重(或您想要的任何属性(设置为边缘以及如何读取。

创建图

import igraph as ig
links = [[1, 2], [1, 3], [2, 4], [1, 2]]
vertices = [v for s in links for v in s]  # = [1,2,1,3,2,4,1,2]
g = ig.Graph()
g.add_vertices(vertices)
for l in links:
  g.add_edge(l[0], l[1], weight=0.5*l[0]*l[1]) # weight value is just an example
print(g)

为了获取顶点列表,链接列表很受宠若惊。并不是说无法重复的顶点,因此无需明确删除它们中的重复元素。

您可以通过指定相对关键字参数(weight=0.5*l[0]*l[1](。

来指定要添加到边缘的任何属性。

检索边缘Infos

您简单地通过e['weight']检索权重,其中e是单个边缘(igraph.Edge对象(。在此示例中,它显示了如何循环循环。

print("nEdgesn")
for e in g.es():
  print("source: %s target: %d" % (e.source, e.target))
  print("multiplicity %d" % (g.count_multiple(e)))
  print("weight %fn" % e['weight'])

输出是:

Edges
source: 1 target: 2
multiplicity 2
weight 1.000000
source: 1 target: 3
multiplicity 1
weight 1.500000
source: 2 target: 4
multiplicity 1
weight 4.000000
source: 1 target: 2
multiplicity 2
weight 1.000000

有关更多详细信息,请参阅IGRAPH的文档:igraph.graph,igraph.vertex和igraph.dedge

我有代码,该代码寻找边缘,以查看图表中是否已经存在。因此,它类似:

edgelist = []
weights = []
for e in links:
    if e in edgelist:
        weights[edgelist.index(edge)] += 1
    else:
        edgelist.append(e)
        weights.append(1)
G = ig.Graph()
G.add_edges(edgelist)
G.es['weight'] = weights

编辑:当然,您可以使用G.es['weight']

访问这些权重

最新更新