3 个版本 (破坏性更新)
0.7.0 | 2022年8月27日 |
---|---|
0.6.0 | 2021年7月6日 |
0.5.0 | 2021年7月2日 |
#7 在 #npy
每月下载量 105
在 2 个crate中(通过 npyz)使用
11KB
198 行
npyz
Numpy格式(*.npy
)的序列化和反序列化。
NPY 是一种简单的二进制数据格式。它在一个标题中存储类型、形状和字节序信息,然后是扁平的二进制数据字段。这个crate提供了一个简单、主要类型安全的读取和写入 *.npy
文件的方法。文件通过迭代器处理,因此它们不需要适合内存。
npyz
是一个分支和继任者,它似乎已经死亡 npy
。
用法
[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
支持通过 derives 的结构化数组,但有许多限制。
与 npy
相比,npyz
有
- 支持多维数组。
- 支持大端文件。
- 支持
Complex
、字符串和字节串。 - 基于
std::io::Read
的更灵活的读取API,因此您可以直接从例如zip::read::ZipFile
中读取。原始API需要一个&[u8]
,期望用户可以使用内存映射来处理大文件。 - 基于
std::io::Write
的写入API。
最初,nippy
npyz
是我在最终向 npy
提交PR之前,毫无顾忌地原型化新功能的地方,但即使是我最初的几个基础PR也尚未被合并。我相信Pavel头脑清醒,注重细节,我很欣赏他们对我的PR的初始回应,但自从上次收到他们的消息已经将近两年了。因此,我决定继续前进并发布分支。
许可证
npyz
版权所有 2021 Michael Lamparski,在MIT许可证下提供。
npyz
基于 npy
构建。 npy
版权所有 2018 Pavel Potoček,在MIT许可证下提供。
lib.rs
:
为结构化数组推导 npyz
的特性。
使用此crate,只需在结构体上使用 #[derive(npyz::Serialize, npyz::Deserialize)]
即可对其进行序列化和反序列化。所有字段都必须实现 Serialize
和 Deserialize
。
依赖
~1.5MB
~35K SLoC