HDF5 是大多数大型科学数据集背后的文件格式:粒子物理模拟、气候模型、机器学习训练管道。
现在 Mojo 有了原生绑定。直接将数据加载到 NuMojo NDArray 中,并在同一管道中运行 CPU/GPU 处理,无需格式转换。
我一直在努力将我的许多科学计算栈和一些知名的计算物理库移植到 Mojo 上(敬请期待我之后发布的更多库相关的内容 xD),而 HDF5 是该工作流程中的核心依赖项,所以就发生了这件事。:微微一笑:
说实话,看到 Mojo 在过去两年里发展如此迅速,真的太棒了。早期移植科学库简直是……噩梦:sweat_smile:。现在几乎一帆风顺,只有偶尔会遇到一些小问题。超级期待接下来的发展!!!
这是hdf5-mojo的早期版本,它是一套用于 HDF5 C 库的高级绑定,并具有 Mojo 友好的 API。它目前已可使用,但仍在不断改进中。
现在的情况是
简单的双层设计:
在实际应用中,你几乎总是会用到高级 API。
###现在哪些方法有效
- 无需预先知道形状即可读取一维/二维数据集
- 从组/数据集中读取标量属性
- 创建文件并写入数据集(行优先)
- 通过安全方式创建群组
require_group
$CONDA_PREFIX通过(pixi友好型)自动发现HDF5库
例子
查看示例,获取包含示例数据的更完整操作步骤。
from hdf5 import H5File
def main() raises:
var f = H5File("data.h5")
# Read scalar attributes
var emin = f.read_scalar_attr[DType.float64]("/group", "min_energy")
var nnodes = f.read_scalar_attr[DType.int32]("/group", "number_energy_nodes")
# Read 1-D and 2-D datasets (sizes discovered automatically)
var xs = f.read_1d[DType.float64]("/group/dataset")
var mat = f.read_2d[DType.float64]("/group/matrix")
print(xs[0], mat[0, 0])
xs.free()
mat.free()
f.close()