我有一些用PyTables创建的HDF数据。这个数据非常大,一个3973850000 x 8双精度值的数组,但是使用PyTables压缩可以很容易地存储它。
我想使用Fortran访问此数据。我知道,
PROGRAM HDF_READ
USE HDF
IMPLICIT NONE
CHARACTER(LEN=100), PARAMETER :: filename = 'example.h5'
CHARACTER(LEN=100), PARAMETER :: dsetname = 'example_dset.h5'
INTEGER error
INTEGER(HID_T) :: file_id
INTEGER(HID_T) :: dset_id
INTEGER(HID_T) :: space_id
INTEGER(HSIZE_T), DIMENSION(2) :: data_dims, max_dims
DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: dset_data
!Initialize Fortran interface
CALL h5open_f(error)
!Open an existing file
CALL h5open_f(filename, H5F_ACC_RDONLY_F, file_id,error)
END PROGRAM HDF_READ
!Open a dataset
CALL h5dopen_f(file_id, dsetname, dset_id, error)
!Get dataspace ID
CALL h5dget_space_f(dset_id, space_id, error)
!Get dataspace dims
CALL h5sget_simple_extent_dims_f(space_id, data_dims,max_dims, error)
!Create array to read into
ALLOCATE(dset_data(data_dims(1), data_dims(2)))
!Get the data
CALL h5dread_f(dset_id, H5T_NATIVE_DOUBLE, dset_data, data_dims,error)
但是,这会产生一个明显的问题,因为当数组变得大于系统内存时,不能将数组分配给具有双精度浮点数的大尺寸。
访问此数据的最佳方法是什么?我目前的想法是针对某种分块方法?或者有没有办法将阵列存储在磁盘上? HDF是否有处理这类大数据的方法 - 我已经阅读过但却找不到与我的案例有关的任何内容。