matlab存儲mat V7.3文件以及python讀取V7.3mat

2019.11.28
matlab在生成大矩陣的時會出現報錯
變量 ‘X_all’ 無法保存到 7.3 以前版本的 MAT 文件。 以及在生成v7.3版本的mat後無法再用scipy.io提供的函數loadmat讀入,python會出現報錯NotImplementedError: Please use HDF reader for matlab v7.3 files。

一 matlab保存大數據時
初始代碼:

save(path,‘X_all’);

會報錯
查找資料做如下修改:

save(path , ‘X_all’ ,’-v7.3’ );   

依然不行!
然後方法2,在home這裏點開(我是matlab2016)找到preference,在找到general–MAT-Files,選中第一個,完成!

在這裏插入圖片描述
在這裏插入圖片描述
然後保存好了

下面用python跑實驗時,發現之前的代碼跑不了新數據,無法讀取
報錯:ValueError: invalid literal for int() with base 10: 'AB 7.3 MAT-file, Platform: GLNXA64, Created on: Wed Nov 27 14:17:40 2019 HDF5 schema 1.00 .

查找解決辦法:

mport h5py
path='/home/...../data.mat'               #需要讀取的mat文件路徑
feature=h5py.File(path)           #讀取mat文件
data = feature['feature_data']

此方法以失敗告終。。。。
出現錯誤UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x89 in position 512: invalid start byte
修改編碼方式,還是失敗!!
再用新方法

使用hdf5storage這個模塊
首先安裝
pip install hdf5storage
然後和h5py差不多

import hdf5storage 
import numpy as np 
data = hdf5storage.loadmat('feature.mat')
feature = data['feature_data']

然後又失敗了。。
報錯AttributeError: ‘_io.TextIOWrapper’ object has no attribute ‘endswith’
不曉得啥原因

目前停滯不前。

2019.12.3

從新梳理了一下代碼(之氣也不知道啥原因)

dataset_dir = "/home/rth/val_data.mat"
lab_dir  = "/home/rth/val_lab.mat"
with h5py.File(dataset_dir,'r') as f1:	
 	cnn_datasets1 = f1['data1'][:]
 	cnn_datasets = np.transpose(cnn_datasets1,[4,3,2,1,0])
	print("cnn_dataset1_shape:",np.shape(cnn_datasets1))
 
with h5py.File(lab_dir,'r') as f2:
	 labels1 = f2['lab'][:]
	 labels=labels1.reshape(1280)  #我需要的是一維數據,因此用了下reshape


之氣寫成這種形式,cnn_datasets1 = f1[‘data1’],發現後面又報錯說沒有數據,翻了很多文檔,發現是因爲with h5py…這個語句關閉文件後,裏面的數據就不能再次使用了,因此需要用cnn_datasets1 = f1[‘data1’][:]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章