python讀取mat文件中的struct問題
python讀取mat文件中的struct
All devils are in the details,做個筆記。
mat文件結構如下
ground_truth_data 是1×1的struct(結構體),包含2個字段,一個是list,一個是imgszie.如圖1所示
圖1
list是一個352×1的cell,點開後如圖2,可以看到list中的每一個cell又由1×1的strcuct組成.
圖2
點開1×1的struct如圖3:
圖3
如果我現在想把這352個1×1的struct值(包括imgname和bbox)都用python提出來然後以txt的格式存儲,應該怎麼做?
經過查找資料,總結如下
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) #執行完這一行,輸出的是(1,352) ,這裡和python中numpy數組的shape返回的不一 #樣,這裡第一個值表示的列,第二個值表示的是行 for i in range(test.shape[1]): #test.shape[1]的值是352 for k in data[(test[0][i])].values(): print(k[:])
如果有字符,記得用chr()函數轉成字符後顯示.
python讀取mat文件報錯
在用python讀取mat文件時報瞭以下錯誤:OSError: Unable to create file
發現是自己mat文件格式的問題,原來直接在matlab中右鍵另存cell文件,但這種文件python打不開,需要用save函數保存才行
eg:
.save('Gaitdata.mat', 'originalData', '-v7.3') % v7.3 so that it is readable by h5py
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- mat矩陣和npy矩陣實現互相轉換(python和matlab)
- python保存大型 .mat 數據文件報錯超出 IO 限制的操作
- python讀取mat文件生成h5文件的實現
- 詳解python讀取matlab數據(.mat文件)
- 解決python調用matlab時的一些常見問題