首頁 > 軟體

python讀取mat檔案生成h5檔案的實現

2022-07-15 14:03:53

讀取mat檔案生成h5檔案

1. Matlab生成 .mat 檔案

p = rand(1,10);
q = ones(10);
save('pqfile.mat','p','q')

當用python讀取 pqfile.mat 這個檔案時,可以通過get§, get(q) 分別獲得p、q的值。

2. 讀取 .mat 檔案

import scipy.io as io
data = io.loadmat(path)
data = data.get('KeyValue')

匯入的mat檔案為dict型別,在load之後需要用get函數將字典內的內容讀出來才可以進行下一步的處理。

讀取mat檔案 基於h5py庫

今天有個任務需要讀取mat檔案中的資料,由於版本的關係,無法使用 sio.loadmat 讀取資料

最後使用的方案是 h5py,下面我將記錄下,我使用h5py庫讀取mat中兩種不同資料結構的方法,這個可浪費了我不少時間,特別是第一種資料結構,巢狀多了一層,在debug的時候,只能看到他的型別是h5py.h5r.Reference,沒有其他有價值的內容,幸好在網上得到啟發,然後成功地讀取了資料。

h5py庫的api 地址 https://docs.h5py.org/en/stable/quick.html 有不懂可以多查閱哦!收穫還挺大的!

兩種資料結構

資料結構1

fixcell 資料結構比較複雜

一個list裡面又巢狀了一個多維資料或者資料矩陣

資料結構2

sizeData資料結構相對簡單

讀取程式碼

import h5py
 
fix_data_file_location_path = r"E:1datasetsalObjdatasetsfixationsxxxx.mat"
fix_data_file_size_path = r"E:1datasetsalObjdatasetsfixationsxxxx.mat"
fixdata_loca_file =  h5py.File(fix_data_file_location_path,"r")
fixdata_size_file =  h5py.File(fix_data_file_size_path,"r")
 
# 第一種資料結構的讀取程式碼,這個例子只是讀取了第一個cell中的部分資料
fixCell = fixdata_loca_file["fixCell"]
# 獲取第一個cell
fixCell_key = fixCell[0][0]
# 根據cell作為Key 從fixdata_loca_file中取值
obj = fixdata_loca_file[fixCell_key]
print(obj[2][:])
 
 
# 第二種資料結構的讀取程式碼
sizeData = fixdata_size_file["sizeData"]
# 獲取第一個cell sizeData[0][6] 0代表的是第一列  6代表的是第六行
height = sizeData[0][6]
weight = sizeData[1][6]
print(height,"  ",weight)

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


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