#npy #structured #reading #numpy #array #data #deserialize

已删除 nippy-derive

#[derive(...)]s 用于在 NPY 文件中读取结构化数组

0.5.0 2021 年 7 月 2 日

#9 in #npy

MIT 许可证

11KB
198

npyz

crates.io version Documentation Build Status

Numpy 格式(*.npy)序列化和反序列化。

NPY 是一种简单的二进制数据格式。它在一个头部中存储类型、形状和字节序信息,之后是平面二进制数据字段。这个crate提供了一种简单、大多数情况下类型安全的读取和写入 *.npy 文件的方法。文件使用迭代器处理,因此不需要适应内存。

npyz 是一个似乎已死亡的 npy 的分支和继任者。

docs.rs 上的 API 文档

用法

[dependencies]
npyz = "0.8"

您可能还感兴趣的一些功能

[dependencies]
npyz = {version = "0.8", features = ["derive", "complex", "npz", "arrayvec", "half"]}

现在可以从 *.npy 文件中读取数据

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let bytes = std::fs::read("test-data/plain.npy")?;

    // Note: In addition to byte slices, this accepts any io::Read
    let npy = npyz::NpyFile::new(&bytes[..])?;
    for number in npy.data::<f64>()? {
        let number = number?;
        eprintln!("{}", number);
    }
    Ok(())
}

有关更多信息,请参阅以下示例:

  • 读取 npy 文件,
  • 写入 npy 文件,
  • 使用结构化数组,
  • ndarray crate 互操作,
  • NPZ 文件和 scipy 稀疏矩阵,

请参阅根模块的 文档

与类似crate的关系

npyz 的名称实际上是缩写。以下是crate的完整名称

npy 加上 npz 支持,以及很多其他实际上比 npz 更重要的功能——不用说 npz 支持甚至根本不包括在第一个版本中——但我得给它取个名字,对吧

为了澄清,npyz 是 Pavel Potoček 的 npy crate 的分支。原始的 npy 支持使用 derive 的结构化数组,但有很多很多限制。

npy 相比,npyz

  • 多维数组的支持。
  • 大端文件的支持。
  • Complex、字符串和字节数组的支持。
  • 一个基于 std::io::Read 的更通用的阅读API,因此您可以直接从例如 zip::read::ZipFile 中读取。原始API需要一个 &[u8],预期用户可以使用memmap来处理大文件。
  • 基于 std::io::Write 的写入API。

最初,nippy npyz 是我在向 npy 提交PR之前,大胆尝试新特性的地方,但即使是我最初的一些基础PR也还没有被合并。我相信Pavel思维敏捷,注重细节,我欣赏他们对我的PR的初始回应,但自从上次听到他们的消息以来,已经过去了近两年。因此,我决定继续前进并发布分支。

许可证

npyz 版权所有 2021 Michael Lamparski,根据MIT许可证提供。

npyz 基于 npy 开发。 npy 版权所有 2018 Pavel Potoček,根据MIT许可证提供。

依赖关系

~1.5MB
~35K SLoC