在Matlab中将大于内存的数据写入HDF5文件

时间:2015-04-05 00:05:58

标签: matlab hdf5

我想将Matlab中的大型数据集矩阵120964x50176(H5T_IEEE_F32LE)保存为HDF5文件。我无法一次将数据集加载到内存中。我将它分成多个文件,大小如108x50176,141x50176,148x50176。我想将它保存在大小为120964x50176的HDF5文件中的相同数据集中。

似乎没有太多关于此的文档。我正在写一些代码,但由于块不相等,这似乎不是正确的方向。如何以行的形式写入此数据集?

dims = [120964 50176];
chunk_size = min([100 50176], dims);

fileID = H5F.create('test_features.h5');
dsetname = 'features';
datatypeID = H5T.copy('H5T_IEEE_F32LE');
dataspaceID = H5S.create_simple(2,fliplr(dims),fliplr(dims));
plistID = H5P.create('H5P_DATASET_CREATE');

H5P.set_chunk(plistID, fliplr(chunk_size));
datasetID = H5D.create(fileID, dsetname, datatypeID, dataspaceID, plistID);

rows_seen = 0;
for i=1:size(testset,1)
    filename = strcat('/datasets/',sprintf('%.6d',imdb.testset(i)),'.mat');
    load(filename);
    H5D.write(datasetID,'H5ML_DEFAULT','H5S_ALL','H5S_ALL','H5P_DEFAULT',feat);
    clear('feat');
    rows_seen = rows_seen + frames(i);
end
H5D.close(datasetID);
H5F.close(fileID);

1 个答案:

答案 0 :(得分:1)

Matfiles v7.3是gzip压缩的HDF5文件。您可以使用h5py和任何其他已编译gzip支持的库加载它们。

关于matfile的好处是简单的用法:

%open
m = matfile(filename,'Writable',1)
%insert some data
m.yourbigmatrix(1:200,1:300)=one_data_block
%get data
one_data_block=m.yourbigmatrix(1:123,1:300)