我正在使用Python(2.6.5)应用程序中的NetworkX(版本1.5)将DiGraph对象(72,000个节点)转换为Numpy(版本1.3)矩阵。我没有确切的数字或代码示例(我正在努力升级到更新的版本以继续测试,如果这是一个老问题)但是将我的图形数据加载到NetworkX.DiGraph中使用了一个微不足道的RAM在VM上46GB的内存。
当我对NetworkX.convert.to_numpy_matrix(DiGraph.nodes())内存消耗失去控制时。 (我分配的超过46GB)
我和Numpy.eye()有类似的问题。它会比我估计的更大。例如,Numpy.eye(72000)将消耗超过46GB的ram。
Numpy.eye()函数创建一个矩阵(2D数组),其中的每个条目都应该占用int的内存。 (2个字节)有一些开销,但我没有试过估计它。
(顶点数*顶点数)* 2个字节 72,000 * 72,000 = 5184000000 5184000000 * 2字节= 10368000000字节或10.3 GB
同样,我有46GB的ram可用。在具有较少ram(8GB)的VM上,Numpy.eye(72000)通常会立即失败并显示“Memory Error”消息。我的46GB虚拟机开始不受控制地占用内存。
任何人都有建议或理由?我已经看到有Numpy内存使用问题的线索,但它们通常都解决了图形的生成方式,而不是Numpy为什么或如何分配内存。
感谢!!!