作者kakar0to (Poker Face)
看板Python
標題[問題] 請教hdf5讀取速度問題
時間Fri May 14 15:03:38 2021
請教大家一下,我有一個large size的hdf5檔案.
檔案裡面存放一個large matrix, shape是(15579,81173)
我需要從這個matrix的15579個row裡面, 隨機取出128個row出來給AI model使用.
現在遇到的問題是讀取速度很慢, 取出128個row大概要花10秒以上的時間.
想請問大家有更快讀取的作法嗎?
感謝.
以下附上程式碼.
import h5py
import numpy as np
h5 = h5py.File('file.h5', 'r')
matrix = h5['matrix/data']
random_list = np.random.randint(matrix.shape[0], size=128)
rows = matrix[random_list,:]
感謝大家回答.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.73.83.225 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1620975821.A.DA9.html
※ 編輯: kakar0to (42.73.83.225 臺灣), 05/14/2021 15:04:25
※ 編輯: kakar0to (42.73.83.225 臺灣), 05/14/2021 15:04:44
1F:→ DavisX: 資料太大會慢正常 05/14 16:43
2F:推 kokolotl: 攤平塞lmdb呢 05/14 19:56
3F:→ DavisX: flatten完應該會快一點 05/14 20:56
4F:→ kakar0to: 是否有辦法知道matrix在file的offset? 05/15 10:41
5F:→ kakar0to: 我可以用c code去讀出這個matrix, 可能會比較快 05/15 10:41
6F:→ kakar0to: 用c的fread與fseek去讀我想要的row 05/15 10:41
7F:推 a0956072892: 以前有用過hdf5 chunk_shape這個參數會影響讀取速度 05/16 19:22
8F:→ a0956072892: 在存hdf5時試試用(1,81173)去切 05/16 19:24
9F:推 lycantrope: 儲存成15579 * (1,81173)的hdf5 05/18 10:36
10F:→ kakar0to: 有查到一個方法還不錯 跟大家分享一下 05/21 22:20
12F:→ kakar0to: 51e5f7fec660c209f06e 05/21 22:20
13F:→ kakar0to: 他是先把matrix儲存成dataset, dataset可以知道file的 05/21 22:22
14F:→ kakar0to: offset, 再透過mmap mapping整個file到記憶體. 05/21 22:22
15F:→ kakar0to: 再來就可以直接存取matrix了, 速度相當快. 05/21 22:23
16F:→ kakar0to: 另外其實有offset之後, 也可以透過c語言的fseek,fread 05/21 22:23
17F:→ kakar0to: 同樣也可以快速存取matrix 05/21 22:24
18F:→ lycantrope: 喔哦,感謝分享! 05/24 12:16