#array #multidimensional-array #codec #metadata #store #zarr #version

zarrs

一个用于多维数组和元数据的Zarr存储格式的库

40个版本 (14个破坏性更新)

新功能 0.16.4 2024年8月22日
0.16.1 2024年7月30日
0.12.5 2024年3月17日
0.8.0 2023年12月26日
0.6.0 2023年11月16日

#204编码

Download history 599/week @ 2024-04-29 290/week @ 2024-05-06 294/week @ 2024-05-13 79/week @ 2024-05-20 24/week @ 2024-05-27 8/week @ 2024-06-03 100/week @ 2024-06-10 78/week @ 2024-06-17 132/week @ 2024-06-24 191/week @ 2024-07-01 167/week @ 2024-07-08 41/week @ 2024-07-15 128/week @ 2024-07-22 560/week @ 2024-07-29 230/week @ 2024-08-05 170/week @ 2024-08-12

每月1,088次下载
用于 2 crates

MIT/Apache

1.5MB
30K SLoC

zarrs

Latest Version zarrs documentation msrv downloads build codecov

zarrs 是一个用于 Zarr 存储格式的Rust库,用于多维数组和元数据。它支持

变更日志可在 此处 查看。过去版本的正确性问题 详细说明

在澳大利亚国立大学堪培拉材料物理系开发。

入门

  • 查看 实现状态
  • 查看 示例
  • 阅读 文档。从 array::Arraystoragemetadata 开始。
  • 查看基于此crate的各种工具的 zarrs_tools。包括
    • 一个可以更改编解码器、块形状、将Zarr V2转换为V3等的重编码器。
    • 从Zarr数组创建一个 OME-Zarr 层次结构。
    • 变换数组:裁剪、缩放、下采样、梯度幅度、高斯、噪声过滤等。
    • 基准测试工具和 zarrs 的性能基准。

实现状态

Zarr增强提案 状态 Zarrs
ZEP0001: Zarr规范版本3 已接受 完全支持
ZEP0002: 分片编解码器 已接受 完全支持
草案 ZEP0003:可变分块 zarr-developers #52 完全支持
草案 ZEP0007:字符串 zarr-developers/zeps #47 原型

示例

use zarrs::array::{ArrayBuilder, DataType, FillValue, ZARR_NAN_F32};
use zarrs::array::codec::GzipCodec; // requires gzip feature
use zarrs::array_subset::ArraySubset;
use zarrs::storage::{ReadableWritableListableStorage, store::FilesystemStore};

// Create a filesystem store
let store_path: PathBuf = "/path/to/store".into();
let store: ReadableWritableListableStorage =
    Arc::new(FilesystemStore::new(&store_path)?);

// Create a new V3 array using the array builder
let array = ArrayBuilder::new(
    vec![3, 4], // array shape
    DataType::Float32,
    vec![2, 2].try_into()?, // regular chunk shape (non-zero elements)
    FillValue::from(ZARR_NAN_F32),
)
.bytes_to_bytes_codecs(vec![
    Box::new(GzipCodec::new(5)?),
])
.dimension_names(["y", "x"].into())
.attributes(serde_json::json!({"Zarr V3": "is great"}).as_object().unwrap().clone())
.build(store.clone(), "/group/array")?; // /path/to/store/group/array

// Store the array metadata
array.store_metadata()?;
println!("{}", serde_json::to_string_pretty(array.metadata())?);
// {
//     "zarr_format": 3,
//     "node_type": "array",
//     ...
// }

// Perform some operations on the chunks
array.store_chunk_elements::<f32>(
    &[0, 1], // chunk index
    &[0.2, 0.3, 1.2, 1.3]
)?;
array.store_array_subset_ndarray::<f32, _>(
    &[1, 1], // array index
    ndarray::array![[-1.1, -1.2], [-2.1, -2.2]]
)?;
array.erase_chunk(&[1, 1])?;

// Retrieve all array elements as an ndarray
let array_subset_all = ArraySubset::new_with_shape(array.shape().to_vec());
let array_ndarray = array.retrieve_array_subset_ndarray::<f32>(&array_subset_all)?;
println!("{array_ndarray:4}");
// [[ NaN,  NaN,  0.2,  0.3],
//  [ NaN, -1.1, -1.2,  1.3],
//  [ NaN, -2.1,  NaN,  NaN]]

zarrs 生态系统

  • zarrs_tools:创建和操作 Zarr V3 数据的各种工具。
  • zarrs_ffi:将 zarrs 的一部分暴露为 C API。

许可证

zarrs 授权采用以下任一许可证:

除非您明确说明,否则根据 Apache-2.0 许可证定义的任何有意提交给作品并由您包含的贡献,应以上述双授权形式,不附加任何额外条款或条件。

依赖项

~8–24MB
~352K SLoC