Python讀取及保存mat文件的注意事項(xiàng)說明
Python讀取及保存mat文件
在說明python讀取mat文件之前需要強(qiáng)調(diào)2點(diǎn):
讀取的時(shí)候需要注意讀出來的shape是什么樣的,是否符合自己的預(yù)期,如果shape不是自己預(yù)期的那樣,就需要用np.transpose(mat, [x, x, x])進(jìn)行修正。
讀取的時(shí)候需要注意取值范圍,也就是最大值,因?yàn)樵谧鳛橛?xùn)練數(shù)據(jù)的時(shí)候需要首先進(jìn)行歸一化(避免無法收斂),而不同的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庫進(jìn)行讀取,原因在于前兩種與保存該mat文件時(shí)所用matlab的版本有關(guān)(7.3),也就是說一個(gè)mat文件要么能用scipy.io讀,要么能用h5py能讀。
而hdf5storage就不存在這個(gè)問題,一般的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是什么樣的,用它讀出來也就是什么樣的,比較方便。
所以建議讀取和保存都使用hdf5storage。
Python讀取嵌套.mat文件
從網(wǎng)上下載的數(shù)據(jù)集可能是保存為.mat文件的,保存著很多圖片
我們先來看一下本次實(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.首先我們先加載對應(yīng)的模塊,并用這個(gè)模塊加載對應(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,還不是存儲的數(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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
pytorch 中autograd.grad()函數(shù)的用法說明
python使用xlsx和pandas處理Excel表格的操作步驟
python使用Selenium和cookie繞過驗(yàn)證碼實(shí)現(xiàn)登錄示例代碼
Python數(shù)字圖像處理代數(shù)之加減乘運(yùn)算
利用jupyter網(wǎng)頁版本進(jìn)行python函數(shù)查詢方式
python實(shí)現(xiàn)兩個(gè)字典合并,兩個(gè)list合并

