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