逐步构建一个numpy数组并测量内存使用情况

11 python memory-management numpy

我有一系列大型文本文件(最多1个gig),这些文件是从需要在Python中分析的实验中输出的.它们最好加载到2D numpy数组中,这是第一个问题:

  • 由于在加载开始时未知行数,如何逐行地最有效地构建非常大的numpy数组?

简单地将行添加到数组中在内存方面效率很低,因为两个大型数组会暂时共存.如果您使用,似乎会出现同样的问题numpy.append.这些stack功能很有前景,但理想情况下我希望将阵列增加到位.

这导致了第二个问题:

  • 观察大量使用numpy数组的Python程序的内存使用情况的最佳方法是什么?

为了研究上面的问题,我使用了通常的内存分析工具 - heapy和pympler - 但是我只得到外部数组对象的大小(80字节)而不是它们包含的数据.除了粗略测量Python进程使用了​​多少内存之外,如何在数组增长时获得"完整"大小的数据?

本地详细信息:OSX 10.6,Python 2.6,但欢迎使用一般解决方案.

AFo*_*lia 7

除了创建最大可能大小的空数组(numpy.empty),然后在最后使用视图时,无法确保您可以将数组增长到位.你不能从小开始,因为无法保证你可以扩展地图的任何内存,而不会破坏其他一些数据.(所有这些都比python低得多,允许你从解释器内部获得.)

你最好的选择可能是numpy.fromiter.查看源,随着项目数量的增加,阵列每次扩展50%以上.如果你可以轻松获得行数(比如计算行数),你甚至可以将它计算出来.