首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用HDF.Pinvoke读取HDF5数据集?

如何用HDF.Pinvoke读取HDF5数据集?
EN

Stack Overflow用户
提问于 2019-01-31 14:46:29
回答 1查看 1.1K关注 0票数 2

我开始使用这个https://github.com/HDFGroup/HDF.PInvoke来处理HDF5文件。但是文档非常差。我想读取数据集。我使用这个函数: H5D.read(...)。此函数的最后一个参数是buf,类型为System.IntPtr。我对这个参数有问题。你能帮我举例说明如何读取整个数据集以及如何定义这个参数吗?我要读取的数据集是浮点数的三维数组。我是用VB.net写的,但是用C#写例子也行。非常感谢。

EN

Stack Overflow用户

回答已采纳

发布于 2019-02-07 20:05:10

因此,我在此基础上编写了一个解决方案:https://github.com/HDFGroup/HDF.PInvoke/wiki/Cookbook-:-Strings

在上面的链接中,读取了字符串的一维数据集。

我的解决方案是通用的(除了BitConverter部件),可以读取各种维度和数据类型的数据集:

代码语言:javascript
运行
复制
    Dim dsID = H5D.open(hdf5fileId, dsname, H5P.DEFAULT)

    Dim spaceID = H5D.get_space(dsID)
    Dim typeID = H5D.get_type(dsID)
    Dim rank = H5S.get_simple_extent_ndims(spaceID)
    Dim dims(rank - 1) As ULong
    Dim maxDims(rank - 1) As ULong
    H5S.get_simple_extent_dims(spaceID, dims, maxDims)
    Dim sizeData = H5T.get_size(typeID)
    Dim size = sizeData.ToInt32()
    Dim bytearray_elements = 1
    For i = 0 To dims.Length - 1
        bytearray_elements *= dims(i)
    Next
    Dim dataBytes(bytearray_elements * CULng(size)) As Byte

    Dim pinnedArray As GCHandle = GCHandle.Alloc(dataBytes, GCHandleType.Pinned)

    H5D.read(dsID, typeID, H5S.ALL, H5S.ALL, H5P.DEFAULT, pinnedArray.AddrOfPinnedObject())
    pinnedArray.Free()

    ' Read all dataset in loop, val by val
    For i = 0 To bytearray_elements-1:
        Dim slice = idlist_byte.Skip(i * size).Take(size).ToArray()
        Dim val = BitConverter.ToSingle(slice, 0)
    Next
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54454830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档