作者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/cn.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