Python讀取及保存mat文件的注意事項說明
Python讀取及保存mat文件
在說明python讀取mat文件之前需要強調(diào)2點:
讀取的時候需要注意讀出來的shape是什么樣的,是否符合自己的預(yù)期,如果shape不是自己預(yù)期的那樣,就需要用np.transpose(mat, [x, x, x])進行修正。
讀取的時候需要注意取值范圍,也就是最大值,因為在作為訓(xùn)練數(shù)據(jù)的時候需要首先進行歸一化(避免無法收斂),而不同的mat文件的最大值是不一樣的,有0-1、0-255、0-212、0-216。
python實現(xiàn)mat文件的讀取主要有3個函數(shù):
import scipy.io as io imgpath = r"E:\shujuji\CAVE\CAVE_mat\balloons_ms.mat" mat = io.loadmat(imgpath)['rad']
import h5py imgpath = r"E:\shujuji\CAVE\CAVE_mat\balloons_ms.mat" mat = h5py.File(imgpath, 'r')['rad']
import hdf5storage as hdf5 imgpath = r"E:\shujuji\CAVE\CAVE_mat\balloons_ms.mat" mat = hdf5.loadmat(imgpath)['rad']
這里推薦使用第三種,也就是使用hdf5storage庫進行讀取,原因在于前兩種與保存該mat文件時所用matlab的版本有關(guān)(7.3),也就是說一個mat文件要么能用scipy.io讀,要么能用h5py能讀。
而hdf5storage就不存在這個問題,一般的mat文件都能讀取。
再就是使用不同函數(shù)讀取時的shape不一致,容易搞亂,使用hdf5storage讀取的shape和cv2.imread()讀取RGB時的shape一致,方便處理。
python實現(xiàn)mat文件的保存同樣建議使用hdf5storage(好像scipy也可):
hdf5storage.savemat(r"output\balloons_ms.mat", {'cube': mat}, format='7.3') hdf5storage.savemat(r"output\balloons_ms.mat", {'rgb': rgb}, format='7.3')
使用hdf5storage保存時mat的shape是什么樣的,用它讀出來也就是什么樣的,比較方便。
所以建議讀取和保存都使用hdf5storage。
Python讀取嵌套.mat文件
從網(wǎng)上下載的數(shù)據(jù)集可能是保存為.mat文件的,保存著很多圖片
我們先來看一下本次實驗所需要的.mat文件,主要結(jié)構(gòu)體為dataset,包含3個字段,分別是train,test,mapping
其中test是11的
train和test下分別還有三個字段,分別是images,labels,writers
其中test下的labels是208001的
1.首先我們先加載對應(yīng)的模塊,并用這個模塊加載對應(yīng)的.mat文件
from scipy.io import loadmat X = loadmat(r"letters.mat")
注:這里的路徑需要修改
2.然后讀取結(jié)構(gòu)體dataset
data_all = X['dataset']
3.讀取結(jié)構(gòu)體下test下三個字段
#此處僅讀取嵌套結(jié)構(gòu)體下的test,還不是存儲的數(shù)據(jù) data = data_all[0,0]['test'] print('data.shape',data.shape) #此處讀取真正存儲數(shù)據(jù) data_labels = data[0,0]['labels'] print('data_labels.shape',data_labels.shape)
結(jié)果為:
證明正確讀取嵌套結(jié)構(gòu)體的.mat文件
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python 使用pandas實現(xiàn)查詢和統(tǒng)計示例詳解
這篇文章主要為大家介紹了Python 使用pandas實現(xiàn)查詢和統(tǒng)計示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08Python中.py程序在CMD控制臺以指定虛擬環(huán)境運行
本文主要介紹了Python中.py程序在CMD控制臺以指定虛擬環(huán)境運行,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Python淘寶或京東等秒殺搶購腳本實現(xiàn)(秒殺腳本)
本篇文章主要介紹了Python 通過selenium實現(xiàn)毫秒級自動搶購的示例代碼,通過掃碼登錄即可自動完成一系列操作,搶購時間精確至毫秒,可搶加購物車等待時間結(jié)算的,也可以搶聚劃算、火車票等的商品,感興趣的朋友跟隨小編一起看看吧2022-10-10Python機器學(xué)習(xí)應(yīng)用之基于BP神經(jīng)網(wǎng)絡(luò)的預(yù)測篇詳解
BP(back?propagation)神經(jīng)網(wǎng)絡(luò)是1986年由Rumelhart和McClelland為首的科學(xué)家提出的概念,是一種按照誤差逆向傳播算法訓(xùn)練的多層前饋神經(jīng)網(wǎng)絡(luò),是應(yīng)用最廣泛的神經(jīng)網(wǎng)絡(luò)模型之一2022-01-01pandas DataFrame 交集并集補集的實現(xiàn)
這篇文章主要介紹了pandas DataFrame 交集并集補集的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Python實現(xiàn)GUI學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細介紹了Python實現(xiàn)GUI學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01Python機器學(xué)習(xí)應(yīng)用之基于天氣數(shù)據(jù)集的XGBoost分類篇解讀
XGBoost是一個優(yōu)化的分布式梯度增強庫,旨在實現(xiàn)高效,靈活和便攜。它在?Gradient?Boosting?框架下實現(xiàn)機器學(xué)習(xí)算法。XGBoost提供并行樹提升(也稱為GBDT,GBM),可以快速準(zhǔn)確地解決許多數(shù)據(jù)科學(xué)問題2022-01-01Python sklearn CountVectorizer使用詳解
這篇文章主要介紹了Python_sklearn_CountVectorizer使用詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03