附录A 高阶Numpy
A.8 高阶数组输入和输出
在第4章中,我们熟悉了np.save和np.load,它们用于在磁盘上以二进制格式存储数组。对于更复杂的使用,还有许多其他选项需要考虑。特别是,内存映射有额外的好处,允许你处理不适合进入内存的数据集。
A.8.1 内存映射文件
内存映射文件是一种与磁盘上的二进制数据交互的方法,就像它是存储在内存数组中一样。NumPy实现了一个memmap对象,它是ndarray型的,允许对大型文件以小堆栈的方式进行读取和写入,而无须将整个数组载入内存。此外,memmap还有和内存数组相同的方法,因此可以替代很多算法中原本要填入的ndarray。
1.要创建一个新的内存映射,使用np.memmap并传入文件路径、dtype、shape和文件模式(见图A-1)
2.每当内存映射超出范围并且被垃圾收集时,任何更改都将刷新到磁盘。打开已经存在的内存映射时,你仍然必须指定dtype和shape,因为该文件只是磁盘上没有元数据的二进制数据块(见图A-2)
注:内存映射也适用于结构化或嵌套的dtype,如前一节所述
A.8.2 HDF5和其他数组存储选择
PyTables和h5py是两个为NumPy提供友好接口的Python项目,用于以高效和可压缩的HDF5格式存储数组数据(HDF代表分层数据格式,Hierarchical Data Format)。
你可以安全地以HDF5格式存储数百GB或甚至上TB的数据。要了解有关在Python中使用HDF5的更多信息,我建议阅读pandas官方在线文档(http://pandas.pydata.org)。