首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java读取H5文件非常慢

用Java读取H5文件非常慢
EN

Stack Overflow用户
提问于 2017-03-03 20:21:49
回答 1查看 1.2K关注 0票数 2

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

该文件的大小为769M。

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

代码语言:javascript
复制
// 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()函数中。这是很多的双倍,但不应该花那么多时间,对吗?

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

发布于 2019-05-01 23:02:11

我认为问题在于您将数据读取到2D数组Double[][]中。当您这样做时,HDF5实现非常慢(我认为问题可能出在HDFArray.arrayify中)。尝试将数据读取到一维double[]中。

另外,如果您正在使用盒式double,那么使用primative primative可能会更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42578787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档