我必须从一个结构化的二进制文件中读取数百万条记录。在阅读时,我想把数据转换成更有用的内存布局。每一张唱片都很大。总文件大小约为30GB。在
我可以使用numpy.fromfile
,但是我运行的系统只有足够的内存来存储一个完整的数组,因此我无法加载整个文件,然后将所有内容复制到内存中的最终数组中,然后销毁最初加载的数组。在
我也可以使用numpy.fromfile
来读取块,但是我担心{
在这种情况下:文件是在infiniband上加载的,我正在对其运行的分析需要我在整个数据集上循环多次。对于这些循环,我使用Cython,所以欢迎使用任何有帮助的C代码,但我更希望用Python完成。在
从您描述的内容来看,您似乎可以使用^{} 来创建存储在磁盘上的输入二进制文件的内存映射。
np.memmap
数组在大多数方面与标准np.ndarray
的行为相同。您可以像普通数组一样索引它,并将其传递给任何接受np.ndarray
的函数。在幕后,你的操作系统将处理读取、缓存和写入二进制文件的适当部分的业务,防止你无意中读取一个大到无法放入RAM的块。在例如,您可以创建第二个memmap来存储输出,然后在核心内存中可以处理的输入memmap的最大部分进行迭代,随意转换它们,并将它们写入输出memmap中相应的位置。在
如果您正在寻找更好的输出格式来存储数据,我强烈建议您也研究HDF5(例如h5py或PyTables),它提供了可移植性、动态压缩和更快的平均读/写时间等优点。在
相关问题 更多 >
编程相关推荐