如何在 HDF5DotNet 中创建 2D H5Array

Posted

技术标签:

【中文标题】如何在 HDF5DotNet 中创建 2D H5Array【英文标题】:How to create 2D H5Array in HDF5DotNet 【发布时间】:2013-06-16 00:24:16 【问题描述】:

我正在研究将 HDF5 与 C# 和 Matlab/Octave 一起用于我的数据存储。我目前有一个相当基本的问题......我可以在 h5 文件中创建和保存一维数据集,但无法理解二维数据集的代码:

我的二维矩阵(来自列表列表)

List<List<int>> table = new List<List<int>>();
        List<int> row;
        for (int a=1;a<13;a++)
        
            row = new List<int>();
            for (int b=1;b<13;b++)
                row.Add(a*b);
            table.Add(row);
        
// Require an array containing dimensions of array to store.  
            long[] dims = new long[2];
            dims[0] = table.Count;
            dims[1]=table[0].Count;

            int[][] arrays = table.Select(a => a.ToArray()).ToArray();

到目前为止一切顺利。现在,创建 HDF5 文件...

H5DataSpaceId spaceId = H5S.create_simple(1, dims);
H5DataTypeId typeId = H5T.copy(H5T.H5Type.NATIVE_INT);
H5DataSetId dset = H5D.create(h5fileid, "TimesTables", typeId, spaceId);

现在,我成功地将以下行用于一维数组,但我找不到二维数组的语法...

H5D.write(dset,typeId,new H5Array<int>(arrays));

我的第二个问题是如何创建群组和群组?到目前为止,我还没有开始着手,但我希望能有一个起点,同时我会继续努力!

【问题讨论】:

【参考方案1】:

我发现,如果您在 C# 中使用 data[a,b] 表示法而不是 data[a][b] 表示法定义您的数据集,则 H5D.write() 调用就像编写的那样工作。所以,

var mydata = new int[100,100];   // int[100][100] doesn't work
...
H5D.write(dset,typeId,new H5Array<int>(mydata));

【讨论】:

以上是关于如何在 HDF5DotNet 中创建 2D H5Array的主要内容,如果未能解决你的问题,请参考以下文章

如何在 java 中创建一个 2D ArrayList? [复制]

如何在 C++ 中从现有 2D 向量中创建具有特定列的新向量

我应该如何阅读键盘输入以在 WPF 中创建 2D 游戏?

如何在 cocos2d 中创建色相(饱和度)选择器

如何在swift中创建固定大小的2d数组

我如何在 cocos2d 中创建 30 分钟倒计时计时器,就像糖果迷生活一样。