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