h5f.create_dataset导致MemoryError

时间:2017-04-24 23:36:44

标签: python numpy memory h5py

我目前正在尝试使用h5py存储一个大的numpy.ndarray。

    print len(train_input_data_interweawed_normalized)
    print train_input_data_interweawed_normalized[0].shape
    raw_input("Something")
    print "Storing Train input"
    h5f = h5py.File(fbank+'train_input_'+str(dim)+'_'+str(total_frames_with_deltas)+'_window_height_'+str(window_height)+'.h5', 'w')
    h5f.create_dataset('train_input', data=np.concatenate(train_input_data_interweawed_normalized,axis=1))
    ##Program chrash here
    h5f.close()

打印输出:

4834302
(45, 1, 8, 3)

但不知怎的,程序会错误地显示错误消息MemoryError ..

这意味着什么?..没有足够的公羊? 根据htop的ram使用情况是在它崩溃之前是11 gb / 15 gb。

所以不可能那样?

还有什么?

1 个答案:

答案 0 :(得分:0)

连接过程还需要至少所有列表元素的大小作为连续的内存块。如果你只有16GB的RAM,内存分配可能会失败。

连接数据然后将其保存到HDF5文件在这里没有任何意义。为什么要将数据放在数组列表中?

以下示例显示如何将列表内容编写为不需要连接或内存复制到所需大小的HDF5数据集。

#get the dimensions
dim_1=len(train_input_data_interweawed_normalized)
dim_2=train_input_data_interweawed_normalized[0].shape

h5f=h5py.File(fbank+'train_input_'+str(dim)+'_'+str(total_frames_with_deltas)+'_window_height_'+str(window_height)+'.h5','w')
# create the dataset (change the datatype if your images have some other type)
#You have to adapt the chunk size to your needs (How do you want to read the data?)
dset_out = f_out.create_dataset('train_input', (dim_2[0],dim_1,dim_2[2],dim_2[3]), chunks=(dim_2[0], 100, dim_2[2], dim_2[3]),dtype='float32')
for i in range(0,dim_1):    
    dset_out[:,i:i+1,:,:]=train_input_data_interweawed_normalized[i]
f_out.close()