如何在HDF5DotNet中创建2D H5Array

时间:2013-06-19 12:54:33

标签: c# hdf5

我正在调查使用HDF5和C#以及Matlab / Octave进行数据存储。我现在有一个相当基本的问题......我可以在h5文件中创建并保存一维数据集,但无法理解2D的代码:

我的2-D矩阵(来自列表清单)

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);

现在,我成功用于1-D数组的以下行,但我找不到2-D数组的语法......

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

我的第二个问题是你如何创建群组和群组?到目前为止,我还没有开始研究这个问题,但是当我继续研究第一部分时,我会感激起点!

1 个答案:

答案 0 :(得分:4)

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

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