python讀取mat文件中的struct問題
python讀取mat文件中的struct
All devils are in the details,做個筆記。
mat文件結(jié)構(gòu)如下
ground_truth_data 是1x1的struct(結(jié)構(gòu)體),包含2個字段,一個是list,一個是imgszie.如圖1所示

圖1
list是一個352x1的cell,點開后如圖2,可以看到list中的每一個cell又由1x1的strcuct組成.

圖2
點開1x1的struct如圖3:

圖3
如果我現(xiàn)在想把這352個1x1的struct值(包括imgname和bbox)都用python提出來然后以txt的格式存儲,應該怎么做?
經(jīng)過查找資料,總結(jié)如下
1、我使用scipy.io模塊加載時,pycharm控制臺報錯如下:

這是因為scipy.io只能支持matlab版本小于v7.3版本的mat文件。
換句話說就是,如果你的matlab版本比較舊,保存的mat格式為-v7.3及其以前的版本,可以用scipy.io讀取. 如果是比較新的matlab保存的mat文件,就只能用h5py模塊載入了,并且它支持大文件的存儲和讀取.
解決辦法
改用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返回的不一
#樣,這里第一個值表示的列,第二個值表示的是行
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文件報錯
在用python讀取mat文件時報了以下錯誤:OSError: Unable to create file

發(fā)現(xiàn)是自己mat文件格式的問題,原來直接在matlab中右鍵另存cell文件,但這種文件python打不開,需要用save函數(shù)保存才行
eg:
.save('Gaitdata.mat', 'originalData', '-v7.3') % v7.3 so that it is readable by h5py以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
用Python將mysql數(shù)據(jù)導出成json的方法
今天小編就為大家分享一篇用Python將mysql數(shù)據(jù)導出成json的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
Python?dataframe如何設(shè)置index
這篇文章主要介紹了Python?dataframe如何設(shè)置index,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
python matplotlib工具欄源碼探析三之添加、刪除自定義工具項的案例詳解
這篇文章主要介紹了python matplotlib工具欄源碼探析三之添加、刪除自定義工具項的案例詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02

