天天看點

Python使用h5py庫讀取.mat檔案前言一、需要導入的資料二、資料讀取總結

前言

一、需要導入的資料

二、資料讀取

總結

前言

        問題出現:最開始我是打算用scipy來導入mat檔案,結果遇到了版本問題,情況見圖,然後就開始了用h5py庫導入mat,裡面可花了些時間。

Python使用h5py庫讀取.mat檔案前言一、需要導入的資料二、資料讀取總結

一、需要導入的資料

        需要導入的資料是一個多次嵌套的資料:以下展示均為每一層首個資料。

第一層:

Python使用h5py庫讀取.mat檔案前言一、需要導入的資料二、資料讀取總結

 第二層:

Python使用h5py庫讀取.mat檔案前言一、需要導入的資料二、資料讀取總結

 第三層:

Python使用h5py庫讀取.mat檔案前言一、需要導入的資料二、資料讀取總結

第四層有效資料:

Python使用h5py庫讀取.mat檔案前言一、需要導入的資料二、資料讀取總結

         一個mat資料1.5G,有這麼多層好像還是比較合理哈,但是給我讀取就帶來了很大的難度!

二、資料讀取

         直接貼出一層一層讀取的代碼

import scipy.io as sio
import numpy as np
import h5py
#!cd aistudio/home/data/data105826
matdata = h5py.File('/home/aistudio/data/data105826/cuhk-03.mat')
print('1 ',matdata.keys())
print('2 ',matdata['detected'])
print('3 ',matdata['detected'][0])
print('4 ',matdata['detected'][0][0])
print('5 ',matdata[matdata['detected'][0][0]])
print('6 ',matdata[matdata['detected'][0][0]][0][0])
print('7 ',matdata[matdata[matdata['detected'][0][0]][0][0]])
print('8 ',matdata[matdata[matdata['detected'][0][0]][0][0]].shape)
           

         輸出顯示

Python使用h5py庫讀取.mat檔案前言一、需要導入的資料二、資料讀取總結

        對輸出做個解釋:

  1. mat檔案夾下的group,類似于檔案夾的存在,分别是'detected', 'labeled', 'testsets'(對應第一層資料)。
  2. 索引到“檔案夾”   'detected',顯示shape為1*5。
  3. 索引“檔案夾”   'detected'第一維元素,是5個<HDF5 object reference>(對應第二層資料),<HDF5 object reference>類似于檔案夾下的檔案夾名,沒有辦法再索引,如果再繼續索引下去,就會報錯。
  4. 找到“檔案夾”   'detected'下第一個檔案夾名<HDF5 object reference>(matdata['detected'][0][0])(傳回值隻有一個類型,這裡用hh表示)。
  5. 打開mat檔案夾中的hh檔案夾,發現是一個shape(10,843)的資料(對應第三層),說明hh下面還有(10,843)個檔案夾。
  6. 以此類推,按照第4步步驟,找到檔案夾名<HDF5 object reference>(matdata[matdata['detected'][0][0]][0][0],這裡用pp表示),在mat檔案夾中打開pp檔案(matdata[matdata[matdata['detected'][0][0]][0][0]]),print一檢視,輸出的type終于是“u1”(無符号1個位元組資料)了,說明我們打開了好多個檔案夾總算找到了檔案。
  7. 最後索引檔案中第一個資料,得到(3,107,318)的一張照片資料。

注意:從幾個輸出資料可以看出,type=‘|O’表示為檔案夾,type=‘|u1’表示為有效資料。

總結

        以上詳細解釋了h5py庫在導入mat資料遇到多嵌套時的處理,有用的話三連一下!!!