matlab写mat V7.3以及python读取V7.3mat?

最近在学机器学习,在做数据预处理时遇到了一些问题,如在生成大矩阵的时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’);
警告:变量 ‘X_all’ 无法保存到 7.3 以前版本的 MAT 文件。

这是matlab版本的问题(-v7.3版本能支持较大的文件),需要做如下修改:
save(path , ‘X_all’ ,’-v7.3’ ); %不加’-v7.3’无法保存数据

python读取v7.3版本的mat数据

初始代码:
import scipy.io as sio
fname_X= data_location+‘X_all.mat’
x = sio.loadmat(fname_X)[‘X’]
显示报错:NotImplementedError: Please use HDF reader for matlab v7.3 files
研究发现:在Python中读取MATLAB的.mat文件一般使用scipy,但是scipy不支持-v7.3版本的.mat文件(-v7.3版本能支持较大的文件);因此使用h5py进行读取。
需要做如下修改:

import h5py
dict_data = h5py.File(X_all.mat) #dict_data文件里可能有多个cell,各对应着一个dataset

print(dict_data.keys()) # 可以用keys的方法查看cell的名字
# 输出:<KeysViewHDF5 ['X_all']>

print(dict_data.values()) #可以用values方法查看各个cell的信息
# 输出:ValuesViewHDF5(<HDF5 file "X_all.mat" (mode r+)>)

data = dict_data['X_all'] #选取一个cell
print(data.shape)#查看维度,是matlab写入数据的转置
# 输出:(522, 3145776)

## 需要转置回来
data_t = np.transpose(data) #data_t是numpy.ndarray
# 再将其存为npy格式文件
np.save('X_all.npy', data_t)

之后读取就很方便了:

matrix = np.load(X_all.npy')
发布了14 篇原创文章 · 获赞 4 · 访问量 4345

猜你喜欢

转载自blog.csdn.net/Zhuanzhu22nian/article/details/89525762
Mat
今日推荐