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

该文件的大小为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库的byteToDouble()函数中。这是很多的双倍,但不应该花那么多时间,对吗?
谢谢你的帮忙!
发布于 2019-05-01 23:02:11
我认为问题在于您将数据读取到2D数组Double[][]中。当您这样做时,HDF5实现非常慢(我认为问题可能出在HDFArray.arrayify中)。尝试将数据读取到一维double[]中。
另外,如果您正在使用盒式double,那么使用primative primative可能会更好。
https://stackoverflow.com/questions/42578787
复制相似问题