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


版权声明:本文为weixin_43848267原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。