標籤: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].shapeOut: (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].shapeOut: (50L, 53L)In : data[1].shapeOut: (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 方法淺析