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 在 编码
每月1,088次下载
用于 2 crates
1.5MB
30K SLoC
zarrs
zarrs
是一个用于 Zarr 存储格式的Rust库,用于多维数组和元数据。它支持
在澳大利亚国立大学堪培拉材料物理系开发。
入门
- 查看 实现状态。
- 查看 示例。
- 阅读 文档。从
array::Array
、storage
和metadata
开始。 - 查看基于此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 License, Version 2.0 LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0 或
- MIT 许可证 LICENSE-MIT 或 http://opensource.org/licenses/MIT,任选其一。
除非您明确说明,否则根据 Apache-2.0 许可证定义的任何有意提交给作品并由您包含的贡献,应以上述双授权形式,不附加任何额外条款或条件。
依赖项
~8–24MB
~352K SLoC