Matlab操作HDF5文件示例
HDF5文件
在使用Matlab對(duì)數(shù)據(jù)進(jìn)行預(yù)處理時(shí),遇到了內(nèi)存不足的問(wèn)題,因?yàn)閿?shù)據(jù)量太大,在處理完成以前內(nèi)存已經(jīng)爆滿(mǎn)。如果使用Matlab的.m文件對(duì)文件進(jìn)行存儲(chǔ)的話,則需要將數(shù)據(jù)分割成多個(gè)文件,對(duì)后續(xù)的處理造成了不便。HDF5文件則是一種靈活的文件存儲(chǔ)格式,有一個(gè)最大的好處就是在Matlab的處理過(guò)程中可以對(duì)它進(jìn)行擴(kuò)展寫(xiě)入,也就是說(shuō)不是所有數(shù)據(jù)處理完以后一次寫(xiě)入,而是邊處理邊寫(xiě)入,極大的降低了對(duì)系統(tǒng)內(nèi)存的要求。
HDF5文件類(lèi)似與一個(gè)文件系統(tǒng),使用這個(gè)文件本身就可以對(duì)數(shù)據(jù)集(dataset)進(jìn)行管理。例如下圖所示,HDF5文件中的數(shù)據(jù)集皆存儲(chǔ)根目錄/,在根目錄下存在多個(gè)group,這樣一些group類(lèi)似與文件系統(tǒng)的文件夾,在它們可以存儲(chǔ)別的group,也可以存儲(chǔ)數(shù)據(jù)集。

對(duì)于每一個(gè)dataset 而言,除了數(shù)據(jù)本身之外,這個(gè)數(shù)據(jù)集還會(huì)有很多的屬性 attribute,。在hdf5中,還同時(shí)支持存儲(chǔ)數(shù)據(jù)集對(duì)應(yīng)的屬性信息,所有的屬性信息的集合就叫做metadata;

使用Matlab操作HDF5文件
使用Matlab創(chuàng)建HDF5文件
使用Matlab創(chuàng)建HDF5文件的函數(shù)是h5create,使用如下:
h5create(filename,datasetname,[30, 30 , 3, inf],'Datatype','single','ChunkSize',[30,30,3,1000])
filename為h5文件的文件名(不知道什么問(wèn)題,在我的電腦上使用時(shí),這個(gè)函數(shù)無(wú)法指定路徑)。
datasetname則為數(shù)據(jù)集的名字,數(shù)據(jù)集名稱(chēng)必須以/開(kāi)頭,比如/G。
[30,30,3,inf]位數(shù)據(jù)集的大小,比如我的數(shù)據(jù)集為30x30大小的彩色圖像,并且我希望數(shù)量能夠擴(kuò)展,那么就可以指定最后以為度為inf,以表示數(shù)量不限。
Datatype為數(shù)據(jù)類(lèi)型
ChunkSize為數(shù)據(jù)存儲(chǔ)的最小分塊,為了讓數(shù)據(jù)能夠具有擴(kuò)展性,所以為新來(lái)的數(shù)據(jù)分配一定的空間大小,對(duì)于一個(gè)非常大的數(shù)據(jù),這個(gè)值設(shè)置大一點(diǎn)比較好,這樣分塊就會(huì)少一點(diǎn)。比如我的數(shù)據(jù)集中,30x30大小的彩色圖像大概有10萬(wàn)個(gè)左右,那么1000個(gè)存儲(chǔ)在一起較為合適,則chunksize設(shè)置為:[30,30,3,1000]。
使用Matlab寫(xiě)入HDF5
在創(chuàng)建了hdf5文件和數(shù)據(jù)集以后,則可以對(duì)數(shù)據(jù)集進(jìn)行寫(xiě)操作以擴(kuò)展里面的數(shù)據(jù)。使用Matlab寫(xiě)入HDF5文件的函數(shù)是h5write,使用如下:
h5write(fileName,datasetName,data,start,count);
fileName: hdf5文件名
datasetName:數(shù)據(jù)集名稱(chēng),比如/Gdata:需要寫(xiě)入的數(shù)據(jù),數(shù)據(jù)的維度應(yīng)該與創(chuàng)建時(shí)一致,比如,設(shè)置的數(shù)據(jù)集大小為[30,30,3,inf],那么這里的data的前三個(gè)維度就應(yīng)該是[30, 30, 3],而最后一個(gè)維度則是自由的
start:數(shù)據(jù)存儲(chǔ)的起點(diǎn),如果是第一次存,則應(yīng)該為[1, 1, 1, 1](注意數(shù)據(jù)維度的一致性),如果這次存了10000個(gè)樣本,也就是[30,30,3,10000],那么第二次存儲(chǔ)的時(shí)候起點(diǎn)就應(yīng)該為[1,1,1,10001]
count存儲(chǔ)數(shù)據(jù)的個(gè)數(shù),同樣要根據(jù)維度來(lái)(其實(shí)就是數(shù)據(jù)的維度),這里為[30,30,3,10000]
使用Matlab查看HDF5文件信息
Matlab中可以使用h5info函數(shù)來(lái)讀取HDF5文件的信息:
fileInfo = h5info(fileName);
然后通過(guò)解析fileInfo結(jié)構(gòu),則可以得到HDF5文件中的數(shù)據(jù)集名稱(chēng)、數(shù)據(jù)集大小等等必要信息。
使用Matlab讀取HDF5中的數(shù)據(jù)集
Matlab中可以使用h5read函數(shù)來(lái)讀取HDF5文件:
data = h5read(filename,datasetname,start,count)
filename:HDF5文件文件名
datasetname:數(shù)據(jù)集名稱(chēng)
start:從數(shù)據(jù)集中取數(shù)據(jù)的其實(shí)位置
count:取的數(shù)據(jù)數(shù)量
還是以上面的30x30的彩色圖像為例,如果每次需要取1000個(gè),那么第一次取時(shí),start應(yīng)該設(shè)置為[1, 1, 1, 1] ,count設(shè)置為:[30, 30 ,3 1000]。第二次取值時(shí),start則應(yīng)該設(shè)置為[1, 1, 1, 1001],count則設(shè)置為:[30, 30, 3, 1000]。
以上就是Matlab操作HDF5文件示例的詳細(xì)內(nèi)容,更多關(guān)于Matlab操作HDF5文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Git?Commitizen提交規(guī)范化自動(dòng)生成changelog文件
這篇文章主要為大家介紹了Git?Commitizen提交規(guī)范化自動(dòng)生成changelog文件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
如何用idea+gitee來(lái)團(tuán)隊(duì)合作開(kāi)發(fā)項(xiàng)目的教程
這篇文章主要介紹了如何用idea+gitee來(lái)團(tuán)隊(duì)合作開(kāi)發(fā)項(xiàng)目,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
使用SSH快速下載Git項(xiàng)目的實(shí)現(xiàn)方法
下面小編就為大家分享一篇使用SSH快速下載Git項(xiàng)目的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
windows下Idea使用git clone failed. Could not read from remote r
這篇文章主要介紹了windows下Idea使用git clone failed. Could not read from remote repository.,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
git本地分支和stash內(nèi)容報(bào)錯(cuò)消失的問(wèn)題
這篇文章主要介紹了git本地分支和stash內(nèi)容報(bào)錯(cuò)消失,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12

