首頁 > 軟體

python讀取mat檔案中的struct問題

2022-07-15 10:00:55

python讀取mat檔案中的struct

All devils are in the details,做個筆記。

mat檔案結構如下

ground_truth_data 是1x1的struct(結構體),包含2個欄位,一個是list,一個是imgszie.如圖1所示

圖1

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

圖2

點開1x1的struct如圖3:

圖3 

如果我現在想把這352個1x1的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-masterhelp_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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。 


IT145.com E-mail:sddin#qq.com