Python 以mmap模式从.npy文件加载字典

Python 以mmap模式从.npy文件加载字典,python,numpy,file,Python,Numpy,File,因此,我有许多大的.npy文件(每个约600MB),其结构如下: file = {"date": current_date, "some parameters": parameters, "data": data} numpy.save("file.npy", file) 数据字段包含一个很大的数组(每个元素中都有字典!),它对文件大小的贡献最大,因此我希望以mmap模式加载文件,否则,即使我只想访问“date”字段,文件打开过程(np.load().item())也太长 但是,在mmap_m

因此,我有许多大的.npy文件(每个约600MB),其结构如下:

file = {"date": current_date, "some parameters": parameters, "data": data}
numpy.save("file.npy", file)
数据字段包含一个很大的数组(每个元素中都有字典!),它对文件大小的贡献最大,因此我希望以mmap模式加载文件,否则,即使我只想访问“date”字段,文件打开过程(np.load().item())也太长

但是,在mmap_mode='r'中加载文件不起作用,因为文件中有字典

np.load("test.npy", mmap_mode='r')
引发ValueError异常:

ValueError: Array can't be memory-mapped: Python objects in dtype.

我还可以做些什么来加快文件打开时间?我现在不能重写它们,所以不要建议其他解决方案,如PyTables和其他数据库。我确实意识到这里的数据存储问题的解决方案是愚蠢的。

np.save
使用
pickle
来序列化和保存非数组对象。在这种情况下,您有一个外部字典,必须对其进行修改
data
是一个数组,但其元素本身是pickle字典。正如错误所说,
mmap\u模式
无法处理此问题。有了一个漂亮的数字数组,
np.load
可以很容易地确定给定元素或片的位置,就像它是内存中的数组一样容易。但是对象数据类型使用指向内存中其他位置或文件上对象的指针,因此几乎不可能逐段读取文件。我还能做些什么来加快文件打开时间?那要看情况而定,你是在问如何提高一次性阅读速度,还是在程序中经常使用?@Alexander Cécile,好吧,我会被这些文件困住一段时间。那么,是否值得忍受一次糟糕的加载时间,只是为了读取它并将其重写为更好的格式?
np.save
使用
pickle
来序列化和保存非数组对象。在这种情况下,您有一个外部字典,必须对其进行修改
data
是一个数组,但其元素本身是pickle字典。正如错误所说,
mmap\u模式
无法处理此问题。有了一个漂亮的数字数组,
np.load
可以很容易地确定给定元素或片的位置,就像它是内存中的数组一样容易。但是对象数据类型使用指向内存中其他位置或文件上对象的指针,因此几乎不可能逐段读取文件。我还能做些什么来加快文件打开时间?这要视情况而定,你是在问如何加快一次性阅读速度,还是在程序中经常使用?@AlexanderCécile,好吧,我会被这些文件困扰一段时间。那么,仅仅为了阅读并将其改写为更好的格式,是否值得忍受一次糟糕的加载时间?