在python中更改HDF5数组的数据类型

在python中更改HDF5数组的数据类型,python,large-files,hdf,Python,Large Files,Hdf,我有4个HDF5文件,每个大约15GB大小。每一个都是N_i x 2048 x 7 x 7的形式。它们都是float64格式的。我想将它们合并到一个float32类型的nx2048x7x7数据集中。我已经阅读了h5py文档,知道数据集的数据类型不能更改 所以我唯一的想法就是 将所有文件转换为numpy数组 合并数组 从float64转换为float32 创建新的数据集 这种方法的一个明显问题是,我只有32Gb的RAM,无法将这些阵列放入内存中。如何绕过这些限制?首先,我同意,尝试将它们作为num

我有4个HDF5文件,每个大约15GB大小。每一个都是N_i x 2048 x 7 x 7的形式。它们都是float64格式的。我想将它们合并到一个float32类型的nx2048x7x7数据集中。我已经阅读了h5py文档,知道数据集的数据类型不能更改

所以我唯一的想法就是

  • 将所有文件转换为numpy数组
  • 合并数组
  • 从float64转换为float32
  • 创建新的数据集

  • 这种方法的一个明显问题是,我只有32Gb的RAM,无法将这些阵列放入内存中。如何绕过这些限制?

    首先,我同意,尝试将它们作为
    numpy
    加载,然后更改数据类型以获得一些内存

    import numpy as np
    import h5py
    
    hf = h5py.File('file.h5', 'r')
    n1 = np.array(hf["dataset_name"][:])
    
    print(n1)
    

    在第3步之后,如您所述,如果您的系统内存不足,那么如果您想一次加载所有内容,就没有解决方案。您需要找到一台内存足够的机器来完成此任务。

    仍然是4 x 7.5 GB的内存非常接近32 GB的限制。考虑到一些内存对于其他系统任务至关重要,这些数字似乎不正确<代码>2048*10*10*(8字节)=0.0016384千兆字节float64@makis你说没有解决办法是什么意思?残酷地加载内存中的所有数据并查看其是否有效并不是唯一的方法。处理数组的一小部分并将其写入文件怎么样?当然,我的意思是,如果OP希望同时加载内存中的所有内容。@makis它更像15000*2048*10*10*(8字节)您可以一次处理数组的1%,完成该工作,写入hdf5文件,丢弃1%,转到下一节?理论上我可以这样做,你有没有关于我将如何实现这一点的建议?我对h5py库的了解还很初步,我也不知道,但我认为将较小的数据集附加到现有文件(read)是完全可行的,因此您应该能够初始化文件,并在运行过程中使用数组部分扩展if。