MATLAB创建(压缩)hdf5数据集+ python h5py 创建、压缩数据集。

MATLAB相关内容官方文档

Python h5py filter pipline 官方文档

顺着官方文档读就行,不懂的敲一敲代码试试就知道了;

1、用到的函数:

h5create(filename,datasetname,size,Name,value)

h5write(filename,datasetname,data,start,count,stride)

2、参数说明:filename:hdf5/h5文件的文件名,包含扩展名,如'LLD-logo.hdf5';

                       datasetname:数据集名字,就是在h5文件中创建的dataSet名字,如'data'、‘data_LL’

                       size: 表示数据集的大小,也就是数据的shape,如果你以后要写入的数据的个数维度不确定,可以把个数维度设置为INF;

                       data: 要写入的数据,其大小的'size'应该与之前创建dataSet的size一致。

                       Name,value:表示名称-值形式的键值对,有些参数是可选的,通过  ‘参数名’-‘值’  的形式进行赋值,一般都有默认值

start、count表示写入data的一个子集,start表示开始的索引值,指定要写入的第一个元素,count指沿每个维度要写入的元素数。

stride表示间距、步幅。start、count、stride构成了data的一个超切片。

比如我要写入一个大小(size)为[12,12,3,24]的数组到‘myfile.h5’文件中的‘ds’数据集:可以使用命令:

h5create('myfile.h5','/ds',[12,12,3,24])

如果不存在‘myfile.h5’文件则会自动创建一个;如果有则向已有文件中写入;

这里我们创建一个形状为[12,12,3,24],作为写入数据集的数据,实际情况都是根据你要写入数据的形状来定义size。

然后写入一个与size相同的数组到ds数据集中:

h5write('myfile.h5','/ds',mats)

这样就可以把一个数据写入ds数据集中了。

记录一下今天写h5文件的经验:

MATLAB写h5文件遵循:1、先创建一个空的h5文件,规定好这个文件的文件名、包含的数据集名、数据集的size(其实就是shape)、数据类型,如果要规定压缩等级(共有0-9,默认0应该是压缩等级最低的),还必须要指定‘ChunkSize’,最好就规定为单位数组,比如我要写入的数据的总size是400x400x3x15365,我的size就设为[400x400x3x15365],ChunkSize就设为[400,400,3,1],我设置的最高压缩等级是9,但是也会感觉文件写入的很慢了。2、创建数据集后才能用h5write方法写入数据集。这里可以指定向哪个h5文件的哪个数据集写,如果没有该数据集名会在该h5文件中创建该数据集,指定写入的数据(大小要与之前创建的数据集一致),以及从数据集的什么位置开始写:这时候就是需要指定h5write中的start和count参数.你可以把MATLAB中的多维矩阵的存储想象成一个个矩形小格子,比如在size为[10,20]的矩阵中的最后[5,7]块大小的位置存储实际情况是这样的:

1,1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6,14

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10,20

从[6,14]开始,存这么一块“ChunkSize”为[5,7]的数据块。如果是3维4维或者更高维的也是同理。

MATLAB中 h5create方法是用来创建数据集的,如果这个文件不存在才创建相应的h5文件,否则是在h5文件中创建数据集;用来创建数据集时需要指定数据集的一些属性,比如数据集的名称、size、Datatype、ChunkSize以及压缩级别Deflate等;先创建使要写入的数据集先存在才能接着使用h5write方法写入数据,写入数据时就是以创建数据集时的各项参数写入。最重要的是之前设置的数据类型和压缩级别,很影响文件大小!!!

常见的hdf5/h5文件的写入过程是:

>> data_HH = h5read('logo-1.hdf5','/data_HH');
>> h5create('test.h5','/data_HH',[200,200,3,15365],'Datatype','single','ChunkSize',[200,200,3,1],'Deflate',7)
>> h5write('test.h5','/data_HH',data_HH);

对于python来说我之前一直没找到如何在python中使用压缩文件,准确来说我看文档不够耐心和仔细,导致错过很多重要细节;之前用hdf5文件格式读取别人的文件只有几百兆或者十几个G,我一读取再写入往往要大了许多,当时以为是存储的数据类型引起的,但是其实是因为我没有用压缩算法!!!对于官方文档的配置说明看的一点也不认真,这一点也是要特别吸取教训;

在python中只需在创建数据集的时候指定:

>>> dset = f.create_dataset("zipped", (100, 100), compression="gzip")
或:
>>> dset = f.create_dataset("zipped_max", (100, 100), compression="gzip", compression_opts=9)

即可。

python 创建压缩的hdf5数据集:

test = h5py.File('test.h5','r+')
test.create_dataset('data_processed',data=data_processed,compression='gzip',compression_opts=7)

 

你可能感兴趣的:(MATLAB创建(压缩)hdf5数据集+ python h5py 创建、压缩数据集。)