Python h5py创建_数据集循环速度慢

Python h5py创建_数据集循环速度慢,python,numpy,hdf5,h5py,Python,Numpy,Hdf5,H5py,我试图创建一个hdf5文件,其中每个数据集都是一个90x18numpy数组。我希望为该文件创建总计2704332个数据集,最终大小约为40GB with h5py.File('allDaysData.h5', 'w') as hf: for x in list: start = datetime.datetime.now() hf.create_dataset(x, data=currentData) end = datetime.date

我试图创建一个hdf5文件,其中每个数据集都是一个90x18numpy数组。我希望为该文件创建总计2704332个数据集,最终大小约为40GB

with h5py.File('allDaysData.h5', 'w') as hf:
    for x in list:
        start = datetime.datetime.now()
        hf.create_dataset(x, data=currentData)
        end = datetime.datetime.now()
        print(end-start)
运行此命令时,create_DATASE命令在开始时不再需要.0004秒。一旦文件达到6GB左右,它会突然切换到每个数据集花费0.08秒

hdf5文件的数据集是否有某种限制?

在这个答案中,您可以看到
create\u dataset
的性能随着迭代次数的增加而降低。由于
h5py
以特殊的结构存储数据,我认为这是因为
h5py
需要更多的时间来索引数据集


有两种解决方案,一种是使用关键字
libver='latest'
。即使生成的文件与旧文件不兼容,它也会显著提高性能。第二种方法是将数组聚合为多个聚合。例如,将每1024个数组聚合为一个。

您有多少物理内存?您的操作系统是什么?运行在AWS EC2 m4.10xlarge实例上,使用Amazon Linux。(160 GB RAM)如果所有数据集都具有相同的形状和数据类型,那么根据您的写入和读取条件,创建一个具有形状(2704332,90,18)且具有适当分块规范(和分块缓存大小)的数据集会更好(更快)。如果这样做,应该可以达到顺序磁盘io速度。请提供更多信息,说明您希望以后如何读取数据。