python讀取mat文件中的struct問(wèn)題
python讀取mat文件中的struct
All devils are in the details,做個(gè)筆記。
mat文件結(jié)構(gòu)如下
ground_truth_data 是1x1的struct(結(jié)構(gòu)體),包含2個(gè)字段,一個(gè)是list,一個(gè)是imgszie.如圖1所示
圖1
list是一個(gè)352x1的cell,點(diǎn)開后如圖2,可以看到list中的每一個(gè)cell又由1x1的strcuct組成.
圖2
點(diǎn)開1x1的struct如圖3:
圖3
如果我現(xiàn)在想把這352個(gè)1x1的struct值(包括imgname和bbox)都用python提出來(lái)然后以txt的格式存儲(chǔ),應(yīng)該怎么做?
經(jīng)過(guò)查找資料,總結(jié)如下
1、我使用scipy.io模塊加載時(shí),pycharm控制臺(tái)報(bào)錯(cuò)如下:
這是因?yàn)閟cipy.io只能支持matlab版本小于v7.3版本的mat文件。
換句話說(shuō)就是,如果你的matlab版本比較舊,保存的mat格式為-v7.3及其以前的版本,可以用scipy.io讀取. 如果是比較新的matlab保存的mat文件,就只能用h5py模塊載入了,并且它支持大文件的存儲(chǔ)和讀取.
解決辦法
改用h5py模塊載入mat并讀取struct值,代碼如下
import h5py data = h5py.File("D:\\Build_my_net\\tensorflow-vgg-master\\tensorflow-vgg-master\help_others\\train_ground_truth_data.mat") test = data['ground_truth_data/list'] print(test.shape) #執(zhí)行完這一行,輸出的是(1,352) ,這里和python中numpy數(shù)組的shape返回的不一 #樣,這里第一個(gè)值表示的列,第二個(gè)值表示的是行 for i in range(test.shape[1]): #test.shape[1]的值是352 for k in data[(test[0][i])].values(): print(k[:])
如果有字符,記得用chr()函數(shù)轉(zhuǎn)成字符后顯示.
python讀取mat文件報(bào)錯(cuò)
在用python讀取mat文件時(shí)報(bào)了以下錯(cuò)誤:OSError: Unable to create file
發(fā)現(xiàn)是自己mat文件格式的問(wèn)題,原來(lái)直接在matlab中右鍵另存cell文件,但這種文件python打不開,需要用save函數(shù)保存才行
eg:
.save('Gaitdata.mat', 'originalData', '-v7.3') % v7.3 so that it is readable by h5py
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Numpy中np.dot與np.matmul的區(qū)別詳解
本文主要介紹了Numpy中np.dot與np.matmul的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Python3爬蟲學(xué)習(xí)之爬蟲利器Beautiful Soup用法分析
這篇文章主要介紹了Python3爬蟲學(xué)習(xí)之爬蟲利器Beautiful Soup用法,結(jié)合實(shí)例形式分析了Beautiful Soup的功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-12-12由Python運(yùn)算π的值深入Python中科學(xué)計(jì)算的實(shí)現(xiàn)
這篇文章主要介紹了由Python運(yùn)算π的值深入Python中科學(xué)計(jì)算的實(shí)現(xiàn),由簡(jiǎn)單的計(jì)算發(fā)散出各種算法的講解,需要的朋友可以參考下2015-04-04Python?pass函數(shù)使用及其應(yīng)用的詳解
Python中,pass是一種空語(yǔ)句,即不做任何事情,只起到占位符的作用,本文主要介紹了Python?pass函數(shù)使用及其應(yīng)用的詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Python實(shí)現(xiàn)提取指定名稱的文件并批量復(fù)制到其他文件夾
本文介紹基于Python語(yǔ)言,讀取一個(gè)文件夾,并將其中每一個(gè)子文件夾內(nèi)符合名稱要求的文件加以篩選,并將篩選得到的文件復(fù)制到另一個(gè)目標(biāo)文件夾中的方法,需要的朋友可以參考下2023-10-10