Python 如何在不将Numpy阵列加载到RAM的情况下将其添加到Numpy阵列?

Python 如何在不将Numpy阵列加载到RAM的情况下将其添加到Numpy阵列?,python,numpy,Python,Numpy,我使用了带有mmap_mode=r的np.load将Numpy数组的“块”加载到RAM中,而不必加载整个数组(这将导致内存错误) 我的问题是如何做相反的事情,从一个小文件中加载一个“块”,并将其添加到一个太大而无法加载到RAM中的numpy数组中,然后保存新的大numpy数组 这段代码是我尝试过的一个例子。我在想,它不会加载整个“db”文件,只会添加到其中,然后保存额外的“块”: 但这不起作用,而且在vstack行中,它似乎最终加载了所有的“db”,因为每次额外的迭代都会花费越来越长的时间,然后

我使用了带有mmap_mode=r的np.load将Numpy数组的“块”加载到RAM中,而不必加载整个数组(这将导致内存错误)

我的问题是如何做相反的事情,从一个小文件中加载一个“块”,并将其添加到一个太大而无法加载到RAM中的numpy数组中,然后保存新的大numpy数组

这段代码是我尝试过的一个例子。我在想,它不会加载整个“db”文件,只会添加到其中,然后保存额外的“块”:


但这不起作用,而且在vstack行中,它似乎最终加载了所有的“db”,因为每次额外的迭代都会花费越来越长的时间,然后会产生内存错误。如何更改此代码,以便在不将整个“db”加载到RAM的情况下获得相同的结果(将“块”添加到“db”)?宁愿远离HDF5…
vstack
只调用
np.concatenate
。这将从输入元组生成一个新数组。你还指望它做什么?连接是在内存中完成的,而不是在任何文件上。而
np.save
正在创建一个全新的文件。它不会添加到使用
np.load
打开的文件中。好吧,那么我该怎么做呢。。。
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