【问题标题】:How to read LZF compressed HDF5 dataset?如何读取 LZF 压缩的 HDF5 数据集?
【发布时间】:2020-10-06 16:48:34
【问题描述】:

我正在尝试读取具有以下属性的数据集:

我正在为 Visual Studio 2017 使用 HDF5 编译的静态库。我主要使用 C++ API,读取非压缩数据集没有问题。在这种情况下我应该如何读取 LZF 压缩数据集?

【问题讨论】:

    标签: c++ hdf5 lzf


    【解决方案1】:

    您需要构建 lzf 过滤器并使其可用于 HDF5。
    h5py repo 提供了一些有关如何执行此操作的信息。

    基本上,您需要克隆 h5py 存储库,将 lzf 过滤器构建为共享库,然后将其放入 /usr/local/hdf5/lib/plugin 并可选择将环境变量指向该位置:

    git clone https://github.com/h5py/h5py.git
    cd h5py/lzf && gcc -O2 -fPIC -shared lzf/*.c lzf_filter.c -o liblzf_filter.so
    mkdir -p /usr/local/hdf5/lib/plugin
    cp liblzf_filter.so /usr/local/hdf5/lib/plugin
    

    然后您可以使用 h5dump dataset.hdf5 对其进行测试。如果 lzf 过滤器被正确检测并加载,它应该转储压缩数据集的内容。否则会报错。

    【讨论】:

    • 您能告诉我如何将 h5py/lzf 与 HDF5 静态链接吗?在读我的时候,上面写着gcc -O2 lzf/*.c lzf_filter.c myprog.c -lhdf5 -o myprog,但我不确定如何将它与 HDF5 源代码静态链接。
    • 我认为您不需要将 lzf 过滤器专门链接到您的静态二进制文件。只需按照 README 中的说明编译 lzf 过滤器并将其放入正确的位置(/usr/local/hdf5/lib/plugin)就足够了,然后使用 HDF5 的二进制文件应该能够读取压缩的 lzf数据集,因为 HDF5 将动态加载 lzf 过滤器插件。尝试在 lzf 压缩数据集上运行 h5dump。如果没有插件,您应该会收到错误消息。使用插件,它应该显示数据集的内容。
    猜你喜欢
    • 2014-09-19
    • 1970-01-01
    • 2018-02-26
    • 2019-06-24
    • 2020-10-27
    • 2015-08-15
    • 1970-01-01
    • 2019-08-13
    • 2016-10-27
    相关资源
    最近更新 更多