[问题] 请教hdf5读取速度问题

楼主: kakar0to (Poker Face)   2021-05-14 15:03:38
请教大家一下,我有一个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,:]
感谢大家回答.
作者: DavisX   2021-05-14 16:43:00
资料太大会慢正常
作者: kokolotl (nooooooooooo)   2021-05-14 19:56:00
摊平塞lmdb呢
作者: DavisX   2021-05-14 20:56:00
flatten完应该会快一点
楼主: kakar0to (Poker Face)   2021-05-15 10:41:00
是否有办法知道matrix在file的offset?我可以用c code去读出这个matrix, 可能会比较快用c的fread与fseek去读我想要的row
作者: a0956072892 (henk2525)   2021-05-16 19:22:00
以前有用过hdf5 chunk_shape这个参数会影响读取速度在存hdf5时试试用(1,81173)去切
作者: lycantrope (阿宽)   2021-05-18 10:36:00
储存成15579 * (1,81173)的hdf5
楼主: kakar0to (Poker Face)   2021-05-21 22:20:00
有查到一个方法还不错 跟大家分享一下https://gist.github.com/maartenbreddels/09e1da79577151e5f7fec660c209f06e他是先把matrix储存成dataset, dataset可以知道file的offset, 再透过mmap mapping整个file到内存.再来就可以直接存取matrix了, 速度相当快.另外其实有offset之后, 也可以透过c语言的fseek,fread同样也可以快速存取matrix
作者: lycantrope (阿宽)   2021-05-24 12:16:00
喔哦,感谢分享!

Links booklink

Contact Us: admin [ a t ] ucptt.com