1. 非 matlab v7.3 files 读写
1
2
3
4
5
6
7
8
9
10
|
import scipy.io as sio import numpy # matFile 读取 matFile = 'matlabdata.mat' datas = sio.loadmat(matFile) # 加载 matFile 内的数据 # 假设 mat 内保存的变量为 matlabdata matlabdata = datas[ 'matlabdata' ] # matFile 写入<br>save_matFile = 'save_matlabdata.mat'<br>save_matlabdata = np.array([1,2,3,4,5])<br>sio.savemat(save_matFile, {'array':save_matlabdata}) |
2. matlab v7.3 files 读取
如果 matlab 保存 data 时,采用的是 ‘-v7.3',scipy.io.loadmat函数加载数据会出现错误:
File "/usr/local/lib/python2.7/dist-packages/scipy/io/matlab/mio.py", line 64, in mat_reader_factory
raise NotImplementedError('Please use HDF reader for matlab v7.3 files')
NotImplementedError: Please use HDF reader for matlab v7.3 files
可以采用:
1
2
3
4
|
import h5py with h5py. File ( 'matlabdata.mat' , 'r' ) as f: f.keys() # matlabdata.mat 中的变量名 datas = h5py. File ( 'matlabdata.mat' )[ 'matlabdata' ].value |
补充:【Matlab/Python】Matlab和Python之间的数据传输
很多时候,我们需要把matlab里的数据保存下来,然后用python来处理。
方法一(.mat格式)
直接将matlab的数据存储成.mat格式,然后在python中利用scipy.io中的loadmat函数来读取
1
2
|
import scipy.io as sio data = sio.loadmat(...) |
方法二(.h5格式)
当要存储的.mat文件比较大时,matlab中需要用save -v7.3才能存储。但是利用方法一在python中读取时,会不支持。可以用以下方法读取
1
2
|
with h5py. File ( "mydata.mat" ) as f: data = f[ "mydata" ][:] |
可以正确读取数据,但是数组维度会倒过来,即本来是(2,3,4,5),读出来会是(5,4,3,2)
但是只有.mat数据用save -v7.3保存时,才能用此方法读取,否则,应用方法一读取
所以可以在matlab中将数据保存成.h5格式,统一按照方法二来读取
matlab中存储.h5格式用如下方法
1
2
3
|
h5create( 'data.h5' , '/data' ,[ 2 , 3 , 4 , 5 ]); data = rand( 2 , 3 , 4 , 5 ) h5write( 'data.h5' , '/data' ,data) |
但是用python读取时,矩阵维度仍然会倒过来
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/zziahgf/article/details/79131850