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’][:]