如何在HDF5中存储带标签的联合

问题描述

假设我有一个像这样的数据集(JSON):

items: [
  {
    type: "foo",foo_a: [1,2,3],foo_b: "Dave",foo_c: false
  },{
    type: "bar",bar_a: 4,bar_b: [false,true]
  },...
]

换句话说,我有一组标记的联合。在HDF5中存储此数据的最佳方法是什么?据我所知,它不是natively support unions

HDF5不支持具有可区分记录或等同于C并集的数据类型

在HDF5中,我找到的关于工会的唯一其他参考文献是在a wishlist from 2007中:

支持联合(区分,变体等)数据类型。

联合(或联合)数据类型是一种可以在同一位置存储几种不同类型的数据类型。这类似于C中的并集数据类型。 它的一种变体是“标记联合”类型,其中标记字段指示在任何给定实例中表示的是哪种类型,以便数据元素 在访问元素时正确处理。联盟可以通过重叠每种类型的存储区域来节省存储空间,因为一次只能使用一个对此功能有很多兴趣,但到目前为止,我们尚未获得此功能的资源。

如何存储这些数据?我能想到的唯一选择是:

  1. 将每个变体存储在引用它们的单独数据集中:
items: [
  {
    type: "foo",index: 0
  },...
],items_foo: [
  {
    foo_a: [1,items_bar: [
  {
    bar_a: 4,...
]
  1. 包括所有可能的字段并使用认值:
items: [
  {
    type: "foo",foo_c: false,bar_a: 0,bar_b: []
  },true],foo_a: [],foo_b: "",...
]
  1. 将数据集设置为不透明的blob类型,并使用某些支持标记并集的编码(例如JSON;尽管我显然不会使用JSON)。

所有这些选项都很糟糕(尽管我认为第一个选项可能是最好,最干净的)。有更好的方法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)