看板 Python 關於我們 聯絡資訊
請教大家一下,我有一個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://www.ptt.cc/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
DavisX: 資料太大會慢正常 05/14 16:43
kokolotl: 攤平塞lmdb呢 05/14 19:56
DavisX: flatten完應該會快一點 05/14 20:56
kakar0to: 是否有辦法知道matrix在file的offset? 05/15 10:41
kakar0to: 我可以用c code去讀出這個matrix, 可能會比較快 05/15 10:41
kakar0to: 用c的fread與fseek去讀我想要的row 05/15 10:41
a0956072892: 以前有用過hdf5 chunk_shape這個參數會影響讀取速度 05/16 19:22
a0956072892: 在存hdf5時試試用(1,81173)去切 05/16 19:24
lycantrope: 儲存成15579 * (1,81173)的hdf5 05/18 10:36
kakar0to: 有查到一個方法還不錯 跟大家分享一下 05/21 22:20
kakar0to: 51e5f7fec660c209f06e 05/21 22:20
kakar0to: 他是先把matrix儲存成dataset, dataset可以知道file的 05/21 22:22
kakar0to: offset, 再透過mmap mapping整個file到記憶體. 05/21 22:22
kakar0to: 再來就可以直接存取matrix了, 速度相當快. 05/21 22:23
kakar0to: 另外其實有offset之後, 也可以透過c語言的fseek,fread 05/21 22:23
kakar0to: 同樣也可以快速存取matrix 05/21 22:24
lycantrope: 喔哦,感謝分享! 05/24 12:16