读取行的最佳HDF5数据集块形状

我有一个合理的大小(压缩后的18GB)HDF5数据集,并希望优化读取行的速度。形状为(639038,10000)。我将多次读取整个数据集中的选定行(例如〜1000行)。所以我不能使用x:(x + 1000)来切片行。


使用h5py从内存不足的HDF5中读取行已经很慢,因为我必须传递一个排序列表并求助于高级索引。有没有一种方法可以避免花式索引,或者我可以使用更好的块形状/大小?


我已经阅读了一些经验法则,例如1MB-10MB的块大小,并且选择的形状与我正在阅读的内容保持一致。但是,构建大量具有不同块形状的HDF5文件进行测试在计算上非常昂贵且非常缓慢。


对于每个〜1,000行的选择,我立即将它们求和以获得长度10,000的数组。我当前的数据集如下所示:


'10000': {'chunks': (64, 1000),

          'compression': 'lzf',

          'compression_opts': None,

          'dtype': dtype('float32'),

          'fillvalue': 0.0,

          'maxshape': (None, 10000),

          'shape': (639038, 10000),

          'shuffle': False,

          'size': 2095412704}

我已经尝试过的东西:


用大块形状(128,10000)重写数据集(据我估计约为5MB)太慢了。

我看了dask.array进行了优化,但是由于〜1,000行很容易容纳在内存中,所以我看不到任何好处。


人到中年有点甜
浏览 909回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP