前言
一、需要導入的資料
二、資料讀取
總結
前言
問題出現:最開始我是打算用scipy來導入mat檔案,結果遇到了版本問題,情況見圖,然後就開始了用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)
輸出顯示
對輸出做個解釋:
- mat檔案夾下的group,類似于檔案夾的存在,分别是'detected', 'labeled', 'testsets'(對應第一層資料)。
- 索引到“檔案夾” 'detected',顯示shape為1*5。
- 索引“檔案夾” 'detected'第一維元素,是5個<HDF5 object reference>(對應第二層資料),<HDF5 object reference>類似于檔案夾下的檔案夾名,沒有辦法再索引,如果再繼續索引下去,就會報錯。
- 找到“檔案夾” 'detected'下第一個檔案夾名<HDF5 object reference>(matdata['detected'][0][0])(傳回值隻有一個類型,這裡用hh表示)。
- 打開mat檔案夾中的hh檔案夾,發現是一個shape(10,843)的資料(對應第三層),說明hh下面還有(10,843)個檔案夾。
- 以此類推,按照第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個位元組資料)了,說明我們打開了好多個檔案夾總算找到了檔案。
- 最後索引檔案中第一個資料,得到(3,107,318)的一張照片資料。
注意:從幾個輸出資料可以看出,type=‘|O’表示為檔案夾,type=‘|u1’表示為有效資料。
總結
以上詳細解釋了h5py庫在導入mat資料遇到多嵌套時的處理,有用的話三連一下!!!