提问人:lara_toff 提问时间:9/9/2020 更新时间:9/9/2020 访问量:327
如何在不将其加载到 RAM 的情况下添加到 Numpy 数组?
How can I add to a Numpy array without loading it into RAM?
问:
我使用带有 mmap_mode = r 的 np.load 将 Numpy 数组的“块”加载到 RAM 中,而无需加载整个数组(这会导致内存错误)。
我的问题是,我该如何做相反的事情,从一个小文件加载一个“块”并将其添加到一个太大而无法加载到 RAM 中的 numpy 数组中,然后保存新的大 numpy 数组?
此代码是我尝试过的一个例子。我以为它不会加载整个“db”文件,而只会添加到其中,然后保存额外的“块”:
for Num in range(0,10000):
chunk = np.random.uniform(0,1,size=(100000,1000))
if Num == 0:
np.save('/content/drive/My Drive/Share/Daily Data/Database/db.npy', chunk)
else:
db = np.load('/content/drive/My Drive/Share/Daily Data/Database/db.npy', mmap_mode='r')
db = np.vstack((db,chunk))
np.save('/content/drive/My Drive/Share/Daily Data/Database/db.npy', db)
del db
但这不起作用,似乎在 vstack 行中,它最终确实加载了所有“db”,因为每次额外的迭代都需要越来越长的时间,然后给出内存错误。如何更改此代码,以便在不将整个“db”加载到 RAM 中的情况下获得相同的结果(将“块”添加到“db”中)?
答: 暂无答案
评论
vstack
只是打电话.这将从输入元组中创建一个新数组。你还期望它做什么?串联是在内存中完成的,而不是在任何文件上完成的。并且正在创建一个全新的文件。它不会添加到使用 .np.concatenate
np.save
np.load