如何读取一个没有换行到numpy数组的大(3-4GB)文件?

时间:2013-11-18 09:30:50

标签: python arrays numpy io

我有一个包含一条长行的3.3gb文件。文件中的值以逗号分隔,并浮动或整数。大多数值都是10。我想将数据读入一个numpy数组。目前,我正在使用numpy.fromfile

>>> import numpy
>>> f = open('distance_matrix.tmp')
>>> distance_matrix = numpy.fromfile(f, sep=',')

但是现在已经运行了一个多小时,它目前正在使用~1 Gig存储器,所以我认为它还没到中途。

是否有更快的方式来读取单行的大数据?

2 个答案:

答案 0 :(得分:3)

这应该是一个评论...但我没有足够的声誉来发表评论。

我使用hdf文件,通过h5py,大小超过200演出,处理时间非常短,大​​约一两分钟,用于文件访问。此外,hdf库支持mpi和并发访问。

这意味着,假设您可以格式化原始的一行文件,作为适当的分层hdf文件(例如,为每个“大”数据段创建一个组),您可以使用hdf的内置功能来使用多个数据的核心处理利用mpi来传递核心之间所需的数据。

你需要小心你的代码并理解mpi如何与hdf一起工作,但它会加快速度。

当然所有这些都取决于将数据放入hdf文件中,以便您可以利用mpi ...所以也许不是最实用的建议。

答案 1 :(得分:1)

考虑使用某种二进制格式转储数据。见http://docs.scipy.org/doc/numpy/reference/generated/numpy.save.html之类的内容 这样它会更快,因为您不需要解析值。

如果您无法更改文件类型(不是您的某个程序的结果),那么您无法做到这一点。确保您的机器有很多内存(至少8GB),因此根本不需要使用交换机。对硬盘进行碎片整理也可能有所帮助,或使用SSD驱动器。

中间解决方案可能是C ++二进制文件来进行解析,然后以二进制格式转储它。我没有关于这个例子的任何链接。