如果我将偏移量设置为非零,则在使用 hyperslab 从 HDF5 文件中读取数据时出现异常

Posted

技术标签:

【中文标题】如果我将偏移量设置为非零,则在使用 hyperslab 从 HDF5 文件中读取数据时出现异常【英文标题】:Getting exception while reading data from HDF5 file using hyperslab if I set Offset non zero 【发布时间】:2014-09-24 13:56:37 【问题描述】:

这里我试图从 hdf5 文件中读取部分数据。我能够在数据集中写入和读取整个数据,但现在我想读取部分数据,因为我正在使用“Hyperslab”它会引发异常

'H5D.read: 
Failed to read data to data set 5000002 with status -1'

现在它给了我 5000000 相同条件下的错误

一行

H5D.read(dataSetIdTO, typeId, memspaceid, filespaceid,
         new H5PropertyListId(new H5P.Template()), new H5Array<int>(readDataBack));

编辑: 此异常仅在 offset 不为 0(零)时引发,如果我设置 offset[0]=0 则它工作正常

我的代码

//Open hdf5 file
H5FileId fileId = H5F.open("myCSharp.h5", H5F.OpenMode.ACC_RDONLY);

long[] offset = new long[1];
offset[0] = 1;

long[] count = new long[1];
count[0] = 500;

//Open group
H5GroupId groupId = H5G.open(fileId, "GroupName");

// Open the data set.
H5DataSetId dataSetIdTO = H5D.open(groupId, "DataSetName");

// Get space id from our data set
H5DataSpaceId filespaceid = H5D.getSpace(dataSetIdTO);

//Create new space to read hyperslab in memory
H5DataSpaceId memspaceid = H5S.create_simple(1, count);

//select hyperslabs in dataspace
H5S.selectHyperslab(memspaceid, H5S.SelectOperator.SET, offset, count);
H5S.selectHyperslab(filespaceid, H5S.SelectOperator.SET, offset, count);

//array to read data
int[] readDataBack = new int[500];

H5DataTypeId typeId = new H5DataTypeId(H5T.H5Type.NATIVE_INT);

//Read data from dataset 
// * I got Exception here*
H5D.read(dataSetIdTO, typeId, memspaceid, filespaceid,
          new H5PropertyListId(new H5P.Template()), new H5Array<int>(readDataBack));

【问题讨论】:

你可以离开 cmets 来改进我的问题。 H5 文件的尺寸是多少? rank 为 1,dim[0] 为 100000 【参考方案1】:

经过这么多努力,我才知道为什么会这样。在这里,我创建的内存空间等于 count,它应该大于给 hyperslab 的 count。

//Create new space to read hyperslab in memory
H5DataSpaceId memspaceid = H5S.create_simple(1, count);

我需要创建新的长数组而不是这个

//delclar long array for memory space dims
long[] memSpaceDims = new long[1];
memSpaceDims[0] = 5001; //it should be greater than count[0]

//Create new space to read hyperslab in memory
H5DataSpaceId memspaceid = H5S.create_simple(1, memSpaceDims);

【讨论】:

以上是关于如果我将偏移量设置为非零,则在使用 hyperslab 从 HDF5 文件中读取数据时出现异常的主要内容,如果未能解决你的问题,请参考以下文章

如果我将 managedObjectContext 设置为使用属性,则为 null,但如果我将其设置为链式控制器,则为非 null

qt minimumSize() 返回 0 但在 qt 设计器中它设置为非零

gitlab ci 脚本在哪个 $?允许为非零

如果任何命令失败,则在最后以非零代码退出 shell 脚本

LimitIterator 偏移量 1 和 2 个元素

获取节点中特定时区的 UTC 偏移量和 DST 信息? [复制]