我想通过包igraph在Python中构建一个图形,我可以添加顶点,但是当我添加边缘时,有一个问题我不知道如何修复。我打印上面的顶点和边缘。
g = ig.Graph()
g.add_vertices(dfset)
g.add_edges(edges)
InternalError:type_indexededgelist.c时出错:272:无法添加边,无效的顶点id
print(dfset)= [1437218112, 1710990122, 1346433521, 1750346227, 1487721718, 1528123965]
print(edges) = [(1346433521, 1437218112),
(1528123965, 1710990122),
(1528123965, 1750346227),
(1710990122, 1750346227),
(1750346227, 1346433521),
(1750346227, 1437218112),
(1750346227, 1487721718)]
InternalError Traceback (most recent call last)
<ipython-input-75-82114955e940> in <module>()
----> 1 g.add_edges(edges)
/software/python/2.7.10/b1/lib/python2.7/site-packages/igraph/__init__.pyc in add_edges(self, es)
253 endpoints. Vertices are enumerated from zero.
254 """
--> 255 return GraphBase.add_edges(self, es)
256
257 def add_vertex(self, name=None, **kwds):
InternalError: Error at type_indexededgelist.c:272: cannot add edges, Invalid vertex id
答案 0 :(得分:1)
堆栈跟踪中的一行显示:
Vertices are enumerated from zero
因此,请确保您使用任意整数添加边的方法正常工作(例如在networkx中,可以使用任何可哈希的东西)。
似乎(对我而言),您需要自己进行映射(例如简单的dict;或者使用文档中提到的库中的属性支持),以便调用add_edges()
函数的值仅为range(0,n_vertices)
!
docs的小摘录:
igraph在其核心中使用顶点和边缘ID。这些ID是整数,从零开始,并且在图的生命周期内,它们在任何给定的时间实例上始终是连续的。这意味着每当删除顶点和边时,将重新编号大量的边和可能的顶点ID以确保连续性。
答案 1 :(得分:1)
来自文档:
add_vertices(n)
source code
Adds some vertices to the graph.
Parameters:
n - the number of vertices to be added, or the name of a single vertex to be added, or an iterable of strings, each corresponding to the name of a vertex to be added. Names will be assigned to the name vertex attribute.
Overrides: GraphBase.add_vertices
igraph将顶点和边存储为直线阵列。顶点和边缘ID是它们在该数组中的偏移量;这就是所有索引的完成方式。
与networkx不同,当您添加ID列表时,它们会转换为字符串,并放入几个新顶点的name
属性,该顶点应为0到5.边缘必须使用实际的顶点ID,不是用户指定的属性。