使用ILNumerics.IO.HDF5读取数据

时间:2014-08-21 08:21:16

标签: ilnumerics

我尝试了ILNumerics.IO.HDF5并且无法读取以下数据:

  • 数据集和属性中的可变长度字符串。
  • 具有可变长度数组的数据集。每个单元格都包含一组数字,这些数字是直方图。
  • 复合数据,即。带有包含某些数字的结构的数据集。

在HDFView 2.10.1中我可以读取这些数据: https://anonfiles.com/file/13756916026cafc4e4ec7c333f235bda

如何将ILNumerics.IO.HDF5用于此数据?

我发现另一篇文章建议将字符串读为char。 但是使用变长字符串会抛出异常:"从属性中读取数据时出错!"

 var file = new H5File("test.h5");
 H5Dataset ds1 = file.First<H5Dataset>("Wind");
 var att = ds1.Attributes["Aggregator"];
 var value = att.Get<char>();

1 个答案:

答案 0 :(得分:2)

您是否可以提供有关如何编写字符串属性以及问题究竟是什么的更多信息。如果您说“无法读取&#39;”,您是否获得空返回值,或者您是否获得例外。

我在应用程序中将字符串作为属性编写,它工作正常。我猜你写字符串的方式可能有问题。根据Haymo的建议,我将字符串转换为char数组并写为属性。这是示例代码

 private ILRetArray<Char> ConvertStringToArray(string str)
        {
            using (ILScope.Enter())
            {
                ILArray<Char> A = ILMath.array<Char>(' ', 1, str.Length);
                for (int i = 0; i < str.Length; i++)
                {
                    A.SetValue(str[i], 0, i);
                }
                return A;
            }
        }

测试用例:

using (var file = new H5File("testwrite.h5"))
            {
                var ds = new H5Dataset("data", ILMath.rand(10,10));
                file.Add(ds);

                string teststr = "Test string";
                ILArray<char> charStr = ConvertStringToArray(mystr);
                ds.Attributes.Add(new H5Attribute("mystring",charStr));

                //Read back the dataset and its attributes
                var group = file.Find<H5Dataset>("data").First();
                ILArray<Char> storedData = group.Attributes["mystring"].Get<Char>();
            }
相关问题