我有两个存储在hdf5中的numpy数组 每个44 GB。我需要将它们连接在一起 但需要在磁盘上进行,因为我只有8GB内存。 我该怎么做?
谢谢!
答案 0 :(得分:0)
要扩展的文件必须具有可扩展变量,该变量至少具有一个无限维度和合理的块大小。然后,您可以轻松地将数据附加到此变量,而hdf5文件格式实际上非常适合此类任务。如果追加不起作用,您可能只需要创建一个新文件,这应该不是问题。下面的示例将创建两个文件,然后将第二个文件中的数据合并到第一个文件。用文件测试> 80G,内存使用不是问题。
import h5py
import numpy as np
ini_dim1 = 100000
ini_dim2 = 1000
counter = int(ini_dim1/10)
dim_extend = int(ini_dim1/counter)
def create_random_dataset(name, dim1, dim2):
ff1 = h5py.File(name,'w')
ff1.create_dataset('test_var',(ini_dim1,ini_dim2),maxshape=(None,None),chunks=(10,10))
for i in range(counter):
ff1['test_var'][i*dim_extend:(i+1)*dim_extend,:] = np.random.random((dim_extend,ini_dim2))
ff1.flush()
ff1.close()
create_random_dataset('test1.h5', ini_dim1, ini_dim2)
create_random_dataset('test2.h5', ini_dim1, ini_dim2)
## append second to first
ff3 = h5py.File('test2.h5','r')
ff4 = h5py.File('test1.h5','a')
print(ff3['test_var'])
print(ff4['test_var'])
ff4['test_var'].resize((ini_dim1*2,ini_dim2))
print(ff4['test_var'])
for i in range(counter):
ff4['test_var'][ini_dim1+i*dim_extend:ini_dim1 + (i+1)*dim_extend,:] = ff3['test_var'][i*dim_extend:(i+1)*dim_extend,:]
ff4.flush()
ff3.close()
ff4.close()