我正在尝试用C++编写一个HDF5文件,该文件基本上包含一个大型时间序列矩阵,格式如下
TimeStamp Property1 Property2
我已经成功地写入了数据,我创建了一个数据集并使用了H5Dwrite函数。
现在我的问题是如何创建一个文件头,换句话说,如果我想把下面的数组写入文件...
[“时间戳”,“属性1”,“属性2”]
...并将其标记到列中,以便于以后使用(我计划用Python分析矩阵)。
我试着用H5Dwrite写一个字符串数组,但是失败了,我猜它想要一致的数据类型,所以它只想要浮点数,这是我的数据的数据类型。然后我读了关于这个元数据的东西,但是我有点不知道如何使用它?任何帮助都将非常感谢。
一个相关的附带问题是,矩阵的第一行可以是字符串,而其他行包含双精度数吗?
1条答案
按热度按时间643ylb081#
清洁溶液
如果将数据存储为compound datatype的一维数组,成员为
TimeStamp
、Property1
、Property2
等,那么字段名将存储为元数据,并且应该易于在Python中读取。我认为还有另一个干净的选择,但我只会提到它,因为我从来没有用过它自己:HDF5's Table Interface。阅读文档,看看您是否愿意使用它。
直接回答您的问题
现在是肮脏的选择:你可以给你现有的数据集添加字符串属性。有很多方法可以做到这一点。你可以有一个字符串属性,所有的字段名用分号分隔,或者每列一个属性。我不推荐这样做,因为这将是非常不标准的。
一个相关的附带问题是,矩阵的第一行可以是字符串,而其他行包含双精度数吗?
没有。
使用复合数据类型的示例
假设你有一个如下定义的结构:
以及向量
Point
s:以及数据集
dset
和适当的内存和文件数据空间,那么您可以创建一个复合数据类型,如下所示:并将数据写入文件,如下所示: