我有一个.npy文件,我基本了解它的所有信息(大小,元素数量,元素类型等),我想要一种检索特定值而不加载数组的方法。目标是使用尽可能少的内存。 我正在寻找类似于: def extract('test.npy',i,j): return "test.npy[i,j]" 我有点知道如何使用文本文件(请参见最近的问题),但使用npy数组可以让我做更多的事情,而不仅仅是行提取。另外,如果您知道任何使用scipy稀疏矩阵的方法,那将非常好。谢谢。
只需使用data = np.load(filename, mmap_mode='r')(或其他模式,如果需要更改特定元素),就可以返回一个内存映射数组。数组的内容不会加载到内存中,而是在磁盘上,但您可以像通常一样索引数组来访问单个项目。(请注意,访问某些切片将比访问其他切片需要更长的时间,具体取决于您的数组的形状和顺序。) HDF是一种更有效的格式,但.npy格式旨在允许memmapped数组。
.npy
格式存储的方式会使这变得困难。我建议使用 HDF5 代替,它允许您读取或修改任意数组或数组切片 - 参考 h5py 或 PyTables。 - ali_m.npy
文件是设计成可以进行内存映射的。虽然 HDF5 在此方面更高效,因为它对文件进行分块(减少磁盘上长时间查找的机会),但 numpy 内置了对.npy
文件进行内存映射的支持。只需要使用np.load(filename, mmap_mode='r')
即可。总的来说,虽然如此,我完全同意 HDF5 是长远而言更好的选择。 - Joe Kington