Python 2.7 酸洗效率
我是igraph的初学者 我有一个60000个节点和900K条边的图形数据。我可以使用pythonigraph成功地创建图形并写入磁盘。我的机器有3G内存 当我以graphml格式将图形写入磁盘时,内存使用率约为19%;使用write_pickle时,使用率上升到50%,所需时间明显增加 igraph这种行为背后的原因是什么?我什么时候应该和什么时候不应该使用pickle格式Python 2.7 酸洗效率,python-2.7,igraph,Python 2.7,Igraph,我是igraph的初学者 我有一个60000个节点和900K条边的图形数据。我可以使用pythonigraph成功地创建图形并写入磁盘。我的机器有3G内存 当我以graphml格式将图形写入磁盘时,内存使用率约为19%;使用write_pickle时,使用率上升到50%,所需时间明显增加 igraph这种行为背后的原因是什么?我什么时候应该和什么时候不应该使用pickle格式 请对此加以说明。Pickle是Python标准库中的序列化程序。在我看来,这些猜测很有可能: 当igraph启动时,他们
请对此加以说明。Pickle是Python标准库中的序列化程序。在我看来,这些猜测很有可能: 当igraph启动时,他们不想创建自己的文件格式,所以他们使用pickle。现在保存图形的默认行为不是pickle,而是自己的格式
在graphml中使用igraph保存对象时,库知道什么是重要的,什么不是重要的,并且将使用最少的内存。然而,Pickle可以将许多Python对象序列化为字符串,并将每个对象保存在列表或字典中,以防重复使用或具有循环引用 Pickling是一种通用格式,用于存储任意对象,这些对象可能引用其他对象,而这些对象反过来也可能引用其他对象。因此,当Python处理一个对象时,它必须跟踪它以前“看到”并序列化的所有对象,以避免陷入无限循环。这可能就是酸洗速度较慢(并且占用更多内存)的原因 使用pickle的优点是,pickle表示将保留每个图形、顶点或边属性的确切Python类型(前提是您使用支持pickle的类型)。GraphML不会保留确切的类型,因为从Python类型到GraphML类型没有明确的映射;例如,在GraphML表示中,所有数值属性都将转换为双精度,而不管原始属性是Python整数、长整数还是浮点数