在Python 2.7上使用Networkx,我一直在尝试构建一个大约2M用户和880M边缘的图表。我正在使用包含边缘列表的大约17Gb的文本文件。 我试过使用函数nx.read_edgelist(),但在使用了大约250Gb或ram(我正在远程服务器上工作)之后,我的程序就被杀了。
我的问题是:networkx使用那么多内存是正常的吗?或者我收集数据时犯了错误? 我一直在考虑使用另一个库,我发现iGraph和图形工具看起来非常有效。有人会对此有任何建议吗?
谢谢!
编辑:我的文件实际上包含880M边,而不是88M
答案 0 :(得分:0)
(我不是100%肯定这一点,但没有其他人回答,所以我会试一试)。
首先,每个边缘保存两次(每个节点一次),因此内存可以快速增长。但是,这可能不是你最大的问题
您的节点名称可能都是整数。但是,如果您没有告诉read_edgelist
它们是整数,它们将被视为字符串。与int相比,用于字符串的内存很大。以下是致电read_edgelist
:
read_edgelist(path, comments='#', delimiter=None, create_using=None, nodetype=None, data=True, edgetype=None, encoding='utf-8')
如果这是您的问题,可以使用
修复G=nx.read_edgelist(path, nodetype = int)