Python 之 h5py 讀取 matlab 中 .mat 檔案 cell 方法淺析

來源:互聯網
上載者:User

標籤: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 方法淺析

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.