如何在C ++中拆分HDF5 compund数据类型

时间:2011-03-14 03:06:52

标签: c++ scientific-computing hdf5

我有一个复合类型的HDF5文件(int,double,double)。目前我在一个操作中通过将结果存储在the example in the documentation之后的结构数组中来阅读它。

但我更愿意将三个部分中的每一个保存在不同的数组中,所以我想提供3个指针,(int *,double *,double *)并直接在3个数组中读取数据而不复制数据

是否有人建议如何做到这一点?

2 个答案:

答案 0 :(得分:1)

我认为不可能直接。

您可以轻松地将结构数组复制到循环中的三个数组中:

int a[n];
double b[n], c[n];
for (int i = 0; i < n; i++)
{
    a[i] = s[i].a;
    b[i] = s[i].b;
    c[i] = s[i].c;
}

假设s是一个struct { int a; double b; double c; }(常量)大小n的数组,但我觉得你正在寻找直接的HDF5方式...

显然,由于我认为复合类型是原子的,因此超级试验不起作用。无论如何,复合类型意味着数据存储在 compound 文件中,因此以这种方式读取数据可能更有效。我给你的解决方案的唯一限制是内存,如果你的数组真的大。在现代计算机上应该没问题;)

答案 1 :(得分:0)

您可以在复合类型中定义单个字段。假设您的数据集以fatal: /.idea: '/.idea' is outside repository 打开,其中包含三个字段dset"a","b","c"元素,然后

LENGTH

这应该是你要求的。也许你已经通过“三次读取文件”这样做了吗?