python讀取mat文件生成h5文件的實現

讀取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:\1dataset\salObj\datasets\fixations\xxxx.mat"
fix_data_file_size_path = r"E:\1dataset\salObj\datasets\fixations\xxxx.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)

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: