npy文件大小约为5 GB,RAM大约为5 GB,因此无法加载两个numpy数组。如何加载一个npy文件并将其行附加到其他npy文件而不加载它
答案 0 :(得分:0)
npy文件是包含数据类型(元数据)和形状的标头,后跟数据本身。
标题以'\n'
(换行符)字符结尾。因此,在追加模式下打开第一个文件,然后在读取模式下打开第二个文件,跳过readline()
标题,然后将块(使用read(size)
)从第二个文件复制到第一个文件。
只剩下一件事:更新标题中的形状(长度)字段。这里有点棘手,因为如果这两个文件有(700,)
和(400,)
形状,则新形状必须为(1300,)
,但标题中可能没有空格为了它。这取决于原始标题中有多少个填充字符 - 有时您会有空间,有时您不会。如果没有空间,则需要将新标头写入新文件,然后从两个源文件中复制数据。不过,这不需要太多的内存或时间,只需要额外的磁盘空间。
您可以在此处查看读取和写入npy文件的代码:https://github.com/numpy/numpy/blob/master/numpy/lib/format.py - 您可能会发现在您的任务中有一些非文档化的函数。