使用Java读取H5文件非常慢

问题描述 投票:2回答:1

我有一个使用H5库的Java程序,它尝试使用以下属性读取H5文件中的数据集:

enter image description here

文件大小为769M。

读取数据集的代码如下(非常简单):

// Open file using the default properties.
fileId = H5.H5Fopen(filepath, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
// Open dataset using the default properties.
if (fileId >= 0) {
   datasetId = H5.H5Dopen(fileId, "/data/0_u0/20050103", HDF5Constants.H5P_DEFAULT);
}

if (datasetId >= 0) {
   dataSpaceId = H5.H5Dget_space(datasetId);
}

// Get the dimensions of the dataset
int ndims = -1;
if (dataSpaceId >= 0)
   ndims = H5.H5Sget_simple_extent_ndims(dataSpaceId);

if (ndims > 0) {
    long[] dims = new long[ndims];
    H5.H5Sget_simple_extent_dims(dataSpaceId, dims, null);
    H5.H5Sclose(dataSpaceId);

    int dimX = (int)dims[0];
    int dimY = (int)dims[1];

    Double[][] dsetData = new Double[dimX][dimY];
    H5.H5Dread(datasetId, HDF5Constants.H5T_NATIVE_DOUBLE,
               HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
               HDF5Constants.H5P_DEFAULT, dsetData);
}

它需要永远(超过15分钟,我之后停止)。我不明白的是,我在Python中也有相同的代码,需要几秒钟。

当我调试Java程序并在中间执行时停止时,它位于H5 lib的byteToDouble()函数中。它有很多倍,但不应该花那么多时间吗?

谢谢你的帮助!

java hdf5
1个回答
0
投票

我认为问题在于你将数据读入二维数组Double[][]。当你这样做时,HDF5实现非常缓慢(认为问题可能在HDFArray.arrayify)。尝试将数据读入1D double[]

你也使用盒装的qazxsw poi,使用原始的qazxsw poi可能会更好。

© www.soinside.com 2019 - 2024. All rights reserved.