2015-09-24 24 views
0

在python脚本中,我需要将一个igraph图放入一个列表中,然后 - 将这个列表转换回igraph图形。导入iGraph边缘列表的正确方法

我想这跟get_edgelist,像这样的

g = [(3, 4), (6, 7), (7, 8), (4, 10), (5, 11), (0, 13), (1, 13), (7, 17), (13, 17), (16, 17), (12, 18), (0, 19), (16, 20), (17, 20), (2, 21), (7, 21), (10, 22), (6, 24), (17, 24), (8, 26), (18, 26), (5, 27), (26, 28), (27, 28), (1, 29), (3, 29), (9, 29), (13, 29), (5, 19), (0, 22), (21, 22), (1, 21), (1, 3), (20, 21), (3, 18), (4, 18), (4, 12), (18, 18), (0, 27), (3, 6), (12, 23), (13, 23), (7, 9), (4, 9)]

然后重新导入它是这样:

from igraph import * 
G = Graph.Read_Edgelist(g) 

将返回:

TypeError: string or file handle expected

任何想法是什么错误?或者有什么正确的方法来做到这一点?

相反,我写了这样的功能:

def edgelist2graph(el): 
    g = Graph() 
    g.add_vertices(nbr_nodes) 
    g.add_edges(el) 
    return g 

这是做到这一点的有效途径?

谢谢!

回答

1

使用write_edgelist将图形的边缘列表保存到文件中 - 然后可以使用Read_Edgelist将其恢复。 get_edgelist只是简单地给你一个表示图的边界列表的元组的Python列表。它不能用Read_Edgelist加载,因为Read_Edgelist适用于文件或文件类对象。

我不知道究竟要达到什么样的,但如果你只是想在一些Python对象的图形存储在一个序列化形式,然后加载回来后,使用Python的pickle模块代替 - 这将节省不只有边缘列表,还有定向性,节点数量以及所有图形,顶点和边缘属性。

+0

我的确需要类似泡菜的解决方案,谢谢! – Rodolphe