码迷,mamicode.com
首页 > 编程语言 > 详细

Python 之 h5py 读取 matlab 中 .mat 文件 cell 方法浅析

时间:2015-07-28 23:13:43      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:python   matlab   h5py   mat   cell   

采用 Python 读取 matlab 中 .mat文件的方法有很多,中外文的论坛上都不少,相关博文

可见:Python 从 mat 文件的读写和存储 到 h5py 文件包

详址:http://blog.csdn.net/u013630349/article/details/47090299

但是,在读取matlab文件的时候,往往不是一层 .mat 就足以解决问题的,.mat 文件中可能是存放的 cell(100*200) 数据, cell(100*200)数据中又分为多个 cell 。那么,如何处理这样的数据结构,实现Python对matlab这一类型数据的读取呢,现对该问题,详解如下:

【问题一】

matlab之中有FEAT_Name.mat文件,该文件的形式如下

FEAT_Name.mat <1x10 cell>	——>	each element is <600x5755 double>

先要实现对FEAT_Name元组的首个矩阵的读取操作,代码实现如下

myfile=h5py.File('F:\\wfpdm\\20150702_2105\\FEAT_Name.mat','r')
data = [myfile[element[0]][:] for element in myfile['FEAT_Name']]
print data[1].shape
Out: (5755,600)


解析

1)for element in myfile[‘FEAT_Name‘] 实现了对 myfile[‘FEAT_Name‘]  的 cell 的遍历;

2)myfile[element[0]]恰好可以理解为myfile[element],即当前文件的当前cell;

3)[myfile[element[0]][:] for element in myfile[‘FEAT_Name‘]],实现了将数据以list结构存入data之中;

4)数据转置了600x5755变成了5755x600,需要实现再转置操作;

【问题二】

matlab之中有f.mat文件,该文件的形式如下

		 ——> rank <1x454 cell>		——> each element is <53x50 double>
   f.mat
		——> compare <1x454 cell>		——> each element is <53x50 double>

要实现对rank元组的首个矩阵的操作,代码实现如下

f = h5py.File("f.mat") 
data = [f[element[0]][:] for element in f['rank']]

result:

In : data[0].shape
Out: (50L, 53L)

In : data[1].shape
Out: (50L, 53L)

解析

这里只是多一步,将matlab数据的 cell.name 写入即可。至此,Python读取matlab的数据方法介绍完毕。

【复盘】

确实存在转置,只是一般的array结构的 .mat 文件不存在,但是针对cell结构的 .mat 文件 存在。需要进行再转置操作,还原数据。

详见:Python 从 mat 文件的读写和存储 到 h5py 文件包

详址:http://blog.csdn.net/u013630349/article/details/47090299

这是笔者第一次完完全全通过外文网站论坛实现问题突破,一直到现在,完成了小结这个知识点的时候还是很兴奋。继续码去了,KK~ !~

【参考】

http://stackoverflow.com/questions/27670149/read-matlab-v7-3-file-into-python-list-of-numpy-arrays-via-h5py

版权声明:本文为博主原创文章,未经博主允许不得转载。

Python 之 h5py 读取 matlab 中 .mat 文件 cell 方法浅析

标签:python   matlab   h5py   mat   cell   

原文地址:http://blog.csdn.net/u013630349/article/details/47111773

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!