
SelfHostList
SelfHostList 是由开发者 Buage 维护的一份开源与自托管应用程序汇总列表。该项目旨在帮助用户快速发现、评估和部署可运行在私有服务器上的优质工具,涵盖从个人生产力、媒体管理到开发运维、网络服务等多个领域。
当数据规模超过内存容量时,传统的 NumPy 数组会因“一次性加载”模式而崩溃。Zarr 正是为解决这一问题而设计的开源库,它通过分块存储、按需读取和灵活后端支持,让 Python 能够高效处理 GB 甚至 TB 级别的 N 维数组。
NumPy 是科学计算的基石,但它假设整个数组可驻留内存。一旦数据量达到千兆字节级别,内存溢出(MemoryError)便难以避免。虽然内存映射(np.memmap)提供了一种替代方案,但它在云存储、并行访问和压缩支持方面存在局限。

Zarr 的核心思想是:不加载全部数据,只读取所需部分。
pip install zarr
# 或
conda install --channel conda-forge zarr
(需 Python 3.11+)
import zarr
import numpy as np
# 生成大型数组
data = np.random.rand(10_000, 1_000)
# 创建 Zarr 数组(分块大小 1000×1000)
z = zarr.open(
"example.zarr",
mode="w",
shape=data.shape,
chunks=(1_000, 1_000),
dtype=data.dtype,
compressor=zarr.Blosc(cname='zstd', clevel=3)
)
# 写入数据
z[:] = data
# 仅加载 10 行数据,不加载整个数组
subset = z[1000:1010, :]
语法与 NumPy 完全一致,但内存消耗仅与所选切片成正比。
✅ 推荐场景:
❌ 不推荐场景:
| 特性 | Zarr | HDF5/netCDF | NumPy .npy |
|---|---|---|---|
| 分块 | ✅ 原生支持 | ✅(HDF5) | ❌ |
| 云存储 | ✅(通过 fsspec) | ⚠️ 有限支持 | ❌ |
| 并行读写 | ✅ | ⚠️ 有限 | ❌ |
| 压缩 | ✅ 块级压缩 | ✅ | ❌ |
| API 熟悉度 | ✅ 类 NumPy | ⚠️ 需学习新接口 | ✅ |
Zarr 在云原生、可扩展性与易用性之间取得了良好平衡。







