You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R语言rhdf5包写入int16数据失败,如何实现int16/uint16存储?

问题:如何用rhdf5将R中的整数矩阵以int16/uint16类型写入HDF5文件?

你遇到的问题是:使用rhdf5包创建HDF5数据集时指定了H5T_NATIVE_INT16类型,但写入数据后结果仍为int32。这是因为R中默认的整数类型是int32,且h5write函数默认会根据输入R对象的类型确定写入的HDF5数据类型,忽略之前创建数据集时指定的类型(甚至可能覆盖数据集的类型定义)。

要成功将数据存储为int16或uint16类型,只需在h5write时明确指定对应的H5数据类型即可,无需提前调用h5createDataset(当然也可以保留创建步骤,但必须保证写入时的类型与创建时一致)。

修正后的测试代码(int16版本)

library(rhdf5)

# 创建R默认的int32类型整数矩阵
m <- matrix(1L, 5, 5)
outFile <- "test_int16.h5"

# 直接写入并指定H5数据类型为int16
h5write(m, file = outFile, name = "m", H5type = "H5T_NATIVE_INT16")
H5close()

# 查看结果
h5ls(outFile)

uint16版本代码

只需将H5type参数改为"H5T_NATIVE_UINT16"即可:

library(rhdf5)

m <- matrix(1L, 5, 5)
outFile <- "test_uint16.h5"

h5write(m, file = outFile, name = "m", H5type = "H5T_NATIVE_UINT16")
H5close()

h5ls(outFile)

关键说明

  • R本身没有原生的int16/uint16类型,输入矩阵默认是int32,但rhdf5会根据H5type参数自动完成类型转换并写入HDF5文件。
  • 如果提前用h5createDataset创建了指定类型的数据集,写入时必须在h5write中指定相同的H5type,否则会因类型不匹配导致错误或覆盖原类型定义。

内容的提问来源于stack exchange,提问作者user21816

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:55:42