首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将三维数组写入HDF5

将三维数组写入HDF5
EN

Stack Overflow用户
提问于 2017-04-19 16:25:37
回答 1查看 2.3K关注 0票数 3

我正在尝试将三维数据集写入HDF5文件。写入成功,并且文件中的维度都是正确的,然而,当使用HDFView工具时,数据是乱七八糟的,但是有一个可识别的结构,所以我必须接近。我不知道我错过了什么,也找不到一个很好的例子来写3D数据。

数据是一个连续的内存块,按如下方式索引:data[layer][row][col]data[layer*rows*cols + row*cols + col]

下面是我使用的代码,其中HDF5_CHECK是一个宏,它在错误时抛出异常。

代码语言:javascript
代码运行次数:0
运行
复制
const hsize_t dim[] = { rows, cols, layers };
hid_t space = H5Screate_simple(3, dim, NULL);

hid_t dataset = H5Dcreate(file, "dataset", type, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
HDF5_CHECK(dataset);
HDF5_CHECK(H5Dwrite(dataset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, data));

HDF5_CHECK(H5Sclose(space));
HDF5_CHECK(H5Dclose(dataset));

编辑

我认为这个问题与索引有关。C++中的数组是正确的。但是,我相信我想将Z,Y,X数据作为Y,X,Z存储在HDF5容器中。这肯定是可能的,但是我不知道怎么做到的。

编辑2

由于数据具有结构,所以我可以在HDFView中将数据视为图像。以下应有助于说明这一问题:

编辑3

联系了人类发展框架小组,发现在目前的实施中不可能改变维度。必须在写入数据集之前完成此操作。

EN

回答 1

Stack Overflow用户

发布于 2017-04-20 14:29:44

由于指定了不正确的内存数据空间,dataset中的元素没有按预期顺序排列。

第4节中的用户指南展示了HDF5如何在两个大小相同的数据空间之间进行读取,但在文件到内存之间交换维度。实际上,H5Dwrite函数声明如下:

代码语言:javascript
代码运行次数:0
运行
复制
herr_t H5Dwrite(hid_t dataset_id, hid_t mem_type_id, hid_t mem_space_id, hid_t file_space_id, hid_t xfer_plist_id, const void * buf )

第三个参数引用内存数据空间,在我们的例子中,内存数据空间与文件的数据空间不一样(以前定义为(row, col, layer))。相反,应该将其定义为(layer, row, col)。指南中的同一页澄清了HDF5遵循与C中相同的数组存储约定:

数据空间尺寸从1编号到等级。HDF5使用C存储约定,假设最后列出的维度是变化最快的维度,而第一个列出的维度是变化最慢的维度。HDF5文件格式存储布局规范遵循C约定,而HDF5库在文件中存储数据空间尺寸时遵循相同的约定。

修正后的代码应该如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
const hsize_t dim[] = { rows, cols, layers };
hid_t space = H5Screate_simple(3, dim, NULL);

hid_t dataset = H5Dcreate(file, "dataset", type, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);

HDF5_CHECK(dataset);

const hsize_t mem_dim[] = { layers, rows, cols };
hid_t mem_space = H5Screate_simple(3, dim, NULL);
HDF5_CHECK(H5Dwrite(dataset, type, mem_space, H5S_ALL, H5P_DEFAULT, data));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43501203

复制
相关文章

相似问题

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