Matlab *** 作 HDF5文件

Matlab  *** 作 HDF5文件,第1张

在使用Matlab对数据进行预处理时,遇到了内存不足的问题,因为数据量太大,在处理完成以前内存已经爆满。如果使用Matlab的 .m 文件对文件进行存储的话,则需要将数据分割成多个文件,对后续的处理造成了不便。HDF5文件则是一种灵活的文件存储格式,有一个最大的好处就是在Matlab的处理过程中可以对它进行扩展写入,也就是说不是所有数据处理完以后一次写入,而是边处理边写入,极大的降低了对系统内存的要求。

HDF5文件类似与一个文件系统,使用这个文件本身就可以对数据集(dataset)进行管理。例如下图所示,HDF5文件中的数据集皆存储根目录 / ,在根目录下存在多个 group ,这样一些 group 类似与文件系统的文件夹,在它们可以存储别的 group ,也可以存储数据集。

使用Matlab创建HDF5文件的函数是 h5create ,使用如下:

filename 为 h5 文件的文件名(不知道什么问题,在我的电脑上使用时,这个函数无法指定路径)。

datasetname 则为数据集的名字,数据集名称必须以 / 开头,比如 /G 。

[30,30,3,inf] 位数据集的大小,比如我的数据集为 30x30 大小的彩色图像,并且我希望数量能够扩展,那么就可以指定最后以为度为inf,以表示数量不限。

Datatype 为数据类型

ChunkSize 为数据存储的最小分块,为了让数据能够具有扩展性,所以为新来的数据分配一定的空间大小,对于一个非常大的数据,这个值设置大一点比较好,这样分块就会少一点。比如我的数据集中, 30x30 大小的彩色图像大概有10万个左右,那么1000个存储在一起较为合适,则 chunksize 设置为:[30,30,3,1000]。

在创建了hdf5文件和数据集以后,则可以对数据集进行写 *** 作以扩展里面的数据。使用Matlab写入HDF5文件的函数是 h5write ,使用如下:

fileName : hdf5文件名

datasetName :数据集名称,比如 /G

data :需要写入的数据,数据的维度应该与创建时一致,比如,设置的数据集大小为 [30,30,3,inf] ,那么这里的 data 的前三个维度就应该是 [30, 30, 3] ,而最后一个维度则是自由的

start :数据存储的起点,如果是第一次存,则应该为 [1, 1, 1, 1] (注意数据维度的一致性),如果这次存了10000个样本,也就是[30,30,3,10000],那么第二次存储的时候起点就应该为[1,1,1,10001]

count 存储数据的个数,同样要根据维度来(其实就是数据的维度),这里为[30,30,3,10000]

Matlab中可以使用 h5info 函数来读取HDF5文件的信息:

然后通过解析fileInfo结构,则可以得到HDF5文件中的数据集名称、数据集大小等等必要信息。

Matlab中可以使用 h5read 函数来读取HDF5文件:

filename :HDF5文件文件名

datasetname :数据集名称

start :从数据集中取数据的其实位置

count :取的数据数量

还是以上面的30x30的彩色图像为例,如果每次需要取1000个,那么第一次取时,start应该设置为[1, 1, 1, 1] ,count设置为:[30, 30 ,3 1000]。第二次取值时,start则应该设置为[1, 1, 1, 1001],count则设置为:[30, 30, 3, 1000]。

MATLAB读取hdf文件

https://blog.csdn.net/good_learner_1/article/details/100047950 

版权

1. 显示hdf文件中的数据集以及属性等等信息

2. 读取hdf文件中的数据

3. 读取数据集的属性

4. 创建hdf文件

5. 往新建的hdf中写入数据

6. 给数据集写属性

官方中文文档

1. 显示hdf文件中的数据集以及属性等等信息

h5disp('文件名.hdf')

1

例如:

h5disp('dataset/sample_A_padded_20160501.hdf')

# 输出:

HDF5 sample_A_padded_20160501.hdf

Group'/'

    Attributes:

'file_format':  '0.2'

Group'/annotations'

        Attributes:

'offset':  1520.000000 3644.000000 3644.000000

Dataset'ids'

Size:432

MaxSize:432

            Datatype:  H5T_STD_U64LE (uint64)

            ChunkSize:  []

            Filters:  none

FillValue:0

Dataset'locations'

Size:3x432

MaxSize:3x432

Datatype:  H5T_IEEE_F32LE (single)

            ChunkSize:  []

            Filters:  none

FillValue:0.000000

Dataset'types'

Size:432

MaxSize:432

            Datatype:  H5T_STRING

StringLength: variable

                Padding: H5T_STR_NULLTERM

CharacterSet: H5T_CSET_UTF8

                Character Type: H5T_C_S1

ChunkSize:432

Filters:  deflate(4)

Group'/annotations/comments'

Dataset'comments'

Size:17

MaxSize:17

                Datatype:  H5T_STRING

StringLength: variable

                    Padding: H5T_STR_NULLTERM

CharacterSet: H5T_CSET_UTF8

                    Character Type: H5T_C_S1

                ChunkSize:  []

                Filters:  none

Dataset'target_ids'

Size:17

MaxSize:17

                Datatype:  H5T_STD_U64LE (uint64)

                ChunkSize:  []

                Filters:  none

FillValue:0

Group'/annotations/presynaptic_site'

Dataset'partners'

Size:2x216

MaxSize:2x216

                Datatype:  H5T_STD_U64LE (uint64)

                ChunkSize:  []

                Filters:  none

FillValue:0

Group '/volumes'

Dataset 'raw'

Size:3072x3072x200

MaxSize:3072x3072x200

            Datatype:  H5T_STD_U8LE (uint8)

ChunkSize:192x96x7

Filters:  deflate(4)

            Attributes:

'resolution':  40.000000 4.000000 4.000000

Group'/volumes/labels'

Dataset'clefts'

Size:1250x1250x125

MaxSize:1250x1250x125

                Datatype:  H5T_STD_U64LE (uint64)

ChunkSize:79x79x4

Filters:  deflate(4)

                Attributes:

'resolution':  40.000000 4.000000 4.000000

'offset':  1520.000000 3644.000000 3644.000000

Dataset'neuron_ids'

Size:1250x1250x125

MaxSize:1250x1250x125

                Datatype:  H5T_STD_U64LE (uint64)

ChunkSize:79x79x4

Filters:  deflate(4)

                Attributes:

'resolution':  40.000000 4.000000 4.000000

'offset':  1520.000000 3644.000000 3644.000000

1

2. 读取hdf文件中的数据

data= h5read('文件名.hdf','数据集名')

1

例如:

raw = h5read('dataset/sample_A_padded_20160501.hdf',' /volumes/raw ')

1

3. 读取数据集的属性

attribute = h5readatt('文件名.hdf','数据集名','属性名')

1

例如:

resolution = h5readatt('dataset/sample_A_padded_20160501.hdf','/volumes/raw','resolution')

1

4. 创建hdf文件

h5create('文件名.hdf','数据集名', 数据大小,'Datatype','数据类型')

1

例如:

h5create('downs_dataset/downsample_A_padded_20160501.hdf','/volumes/raw', size_downs_raw,'Datatype','uint8')

1

5. 往新建的hdf中写入数据

h5write('文件名.hdf','数据集名', 数据变量)

1

例如:

h5write('downs_dataset/downsample_A_padded_20160501.hdf','/volumes/raw', downs_raw)

1

6. 给数据集写属性

h5writeatt('文件名.hdf','数据集名','属性名', 属性变量)

1

例如:

h5writeatt('downs_dataset/downsample_A_padded_20160501.hdf','/volumes/raw','resolution', resolution)

1

A=importdata(file,space,line)

其中,file是所读取的文件名,space是特定的分隔符,line是一个数字,指文本中字符串文字的行数,如上文的数据中line=4。

此代码的含义是,line行是title,line+1行到end是数据,按特定分隔符space读取数据。此方法可以读取文本在上和数据在下的文件。

A是一个sturct,其中A.data就是所需的数据了。

exapmle:

A=importdata('test.txt',' ',4)%运行即可取得数据A.data

此方法也可以按以下 *** 作获取:

在文件菜单中选择 file/import data,按照提示进行 *** 作至结束。

在 command 窗口中输入

>>whos

Name Size Bytes Class

data 5x4 160 double array

textdata 4x1 300 cell array

Grand total is 54 elements using 460 bytes

>>data

data =

1 11 111 1111

2 22 222 2222

3 33 333 3333

4 44 444 4444

5 55 555 5555

>>textdata

textdata =


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10070974.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存