gpt4 book ai didi

c - 了解 HDF5 的 slab

转载 作者:太空狗 更新时间:2023-10-29 15:35:31 26 4
gpt4 key购买 nike

首先,请原谅我的非常基本的问题:我正在阅读教程并且已经成功编写了我的第一个 HDF5 数据集。现在,我正在转向 slab,但我发现这样做有困难。

据我了解,我需要获得一个有效的内存空间,选择一个slab,然后写入我的数据。但显然我做错了什么,因为我得到了错误:

HDF5-DIAG: Error detected in HDF5 (1.8.14) thread 0:
#000: H5Dio.c line 271 in H5Dwrite(): can't prepare for writing data
major: Dataset
minor: Write failed
#001: H5Dio.c line 352 in H5D__pre_write(): can't write data
major: Dataset
minor: Write failed
#002: H5Dio.c line 690 in H5D__write(): src and dest data spaces have different sizes
major: Invalid arguments to routine
minor: Bad value

显然,我正在尝试写入尺寸错误的数据,但我不知道如何更正它。我的目标是创建一个 20x3 矩阵,并将 second 行设置为 { 10, 20, 30 }:

 0  0  0
10 20 30
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0

你能帮我理解这个问题吗?我的错误代码在下面!

谢谢!

#include "hdf5.h"

#define FILE "dset.h5"
#define DSET "/dset"

int main() {

hid_t file_id, dataset_id, dataspace_id, filespace, memspace;
hsize_t dims[2], offset[2], count[2];
herr_t status;

unsigned int dset_data[3] = { 10, 20, 30 };

/* Create a new file using default properties. */
file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);

/* Create the data space for the dataset. */
dims[0] = 20; /* ROWS */
dims[1] = 3; /* COLS */
dataspace_id = H5Screate_simple(2, dims, NULL);

/* Create the dataset. */
dataset_id = H5Dcreate2(file_id, DSET, H5T_STD_I32BE, dataspace_id,
H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);

/* Get the memory space */
memspace = H5Dget_space (dataset_id);

offset[0] = 1; /* ROWS */
offset[1] = 0; /* COLS */

count[0] = 1; /* ROWS */
count[1] = 3; /* COLS */

/* Select the slab */
status = H5Sselect_hyperslab(memspace, H5S_SELECT_SET,
offset, NULL, count, NULL);

/* Write the dataset. */
status = H5Dwrite(dataset_id, H5T_NATIVE_INT,
memspace, H5S_ALL, H5P_DEFAULT,
dset_data);

/* End access to the dataset and release resources used by it. */
status = H5Dclose(dataset_id);

/* Terminate access to the data space. */
status = H5Sclose(dataspace_id);

/* Close the file. */
status = H5Fclose(file_id);
}

最佳答案

您的数据在内存中(内存空间)是连续的,但它在文件空间(dataspace_id ).因此,您需要在 dataset_id 而不是 memspace 上进行选择。

并且您需要调整 memspace 的大小以包含足够的空间供您的行使用。在这里,我只创建一个包含 3 个元素的简单一维数据空间。像这样,hyperslab 的大小(3 个元素)和内存中的大小将匹配。

关于c - 了解 HDF5 的 slab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28413089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com