我有一個(gè)合理的大小(壓縮后的18GB)HDF5數(shù)據(jù)集,并希望優(yōu)化讀取行的速度。形狀為(639038,10000)。我將多次讀取整個(gè)數(shù)據(jù)集中的選定行(例如?1000行)。所以我不能使用x:(x + 1000)來(lái)切片行。使用h5py從內(nèi)存不足的HDF5中讀取行已經(jīng)很慢,因?yàn)槲冶仨殏鬟f一個(gè)排序列表并求助于高級(jí)索引。有沒(méi)有一種方法可以避免花式索引,或者我可以使用更好的塊形狀/大?。课乙呀?jīng)閱讀了一些經(jīng)驗(yàn)法則,例如1MB-10MB的塊大小,并且選擇的形狀與我正在閱讀的內(nèi)容保持一致。但是,構(gòu)建大量具有不同塊形狀的HDF5文件進(jìn)行測(cè)試在計(jì)算上非常昂貴且非常緩慢。對(duì)于每個(gè)?1,000行的選擇,我立即將它們求和以獲得長(zhǎng)度10,000的數(shù)組。我當(dāng)前的數(shù)據(jù)集如下所示:'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}我已經(jīng)嘗試過(guò)的東西:用大塊形狀(128,10000)重寫(xiě)數(shù)據(jù)集(據(jù)我估計(jì)約為5MB)太慢了。我看了dask.array進(jìn)行了優(yōu)化,但是由于?1,000行很容易容納在內(nèi)存中,所以我看不到任何好處。
讀取行的最佳HDF5數(shù)據(jù)集塊形狀
人到中年有點(diǎn)甜
2019-12-04 14:30:00