【问题标题】:Write data larger than memory to HDF5 file in Matlab在 Matlab 中将大于内存的数据写入 HDF5 文件
【发布时间】:2015-06-09 18:10:18
【问题描述】:

我想将来自 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);

【问题讨论】:

  • 您是否尝试使用matfile 命令创建文件? mat-file v7.3 是一个 HDF5 文件,matfile 命令支持加载/保存部分矩阵。
  • 不,我还没有尝试过。我会尝试使用它。它是否会创建一个常规的 hdf5 文件,我可以在 python 中使用 h5py.File() 打开该文件?
  • 它创建常规的 gzip 压缩 hdf5 文件。从未测试过诸如将对象放入其中之类的“丑陋”事物,但是可以在 python 中毫无问题地加载矩阵。
  • @Daniel 现在一切正常。如果您可以将其写为答案,我将接受它作为最佳答案。

标签: matlab hdf5


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2015-09-09
    • 2019-07-04
    • 2019-08-27
    • 2018-03-08
    相关资源
    最近更新 更多