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