对比
NPY vs NPZ
NPY保存一个数组及其dtype和shape。NPZ将多个NPY成员装入ZIP,并可按数组名称读取。
应该选择哪种格式?
单个数组或数值数组的内存映射可选NPY;需一起交付多个数组时可选NPZ。
适用于 NPY
以二进制形式连同类型和形状保存单个 NumPy 数组 · 将数组传递给基于 NumPy 的科学计算和机器学习流程
- 不转成文本而保留 dtype 与多维 shape
- 对兼容的非 object 数组使用内存映射访问
适用于 NPZ
将多个 NumPy 数组打包到一个 ZIP 归档 · 在基于 NumPy 的科学计算流程间传递命名数组
- 将多个数组保存在一个文件中
- 按需选择 ZIP 成员不压缩或压缩
基本信息
| 项目 | NPY | NPZ |
|---|---|---|
| 扩展名 | .npy | .npz |
| MIME 类型 | application/octet-stream | application/zip |
| 常见用途 | 以二进制形式连同类型和形状保存单个 NumPy 数组 · 将数组传递给基于 NumPy 的科学计算和机器学习流程 | 将多个 NumPy 数组打包到一个 ZIP 归档 · 在基于 NumPy 的科学计算流程间传递命名数组 |
| 打开方式 | 使用 NumPy `load` 或其他支持 NPY 的工具打开,并检查 dtype、shape 和格式版本。处理大型数组时,确认内存映射适合该数据布局和用途。 | 使用NumPy `load`或支持NPZ的工具打开,检查数组名称并读取所需内容。使用后关闭返回的`NpzFile`;对于可能含object数组的陌生文件,检查pickle设置。 |
| 导出或转换 | 使用 NumPy `save` 保存。由文本转换时比较数值类型、字节序、shape 和缺失值处理方式。若涉及 object dtype 数组,先确认是否需要 pickle;不要对不可信文件轻率启用。 | 用`savez`或`savez_compressed`保存多个数组。确认成员是未压缩还是DEFLATE,并与接收端核对数组名称、dtype和shape。转换后比较数组和值。 |
按用途选择
不转成文本而保留 dtype 与多维 shape
以二进制形式连同类型和形状保存单个 NumPy 数组 · 将数组传递给基于 NumPy 的科学计算和机器学习流程
NPY对兼容的非 object 数组使用内存映射访问
以二进制形式连同类型和形状保存单个 NumPy 数组 · 将数组传递给基于 NumPy 的科学计算和机器学习流程
NPY将多个数组保存在一个文件中
将多个 NumPy 数组打包到一个 ZIP 归档 · 在基于 NumPy 的科学计算流程间传递命名数组
NPZ按需选择 ZIP 成员不压缩或压缩
将多个 NumPy 数组打包到一个 ZIP 归档 · 在基于 NumPy 的科学计算流程间传递命名数组
NPZ关键点 1
NPY的基本保存单位是单个数组。
进一步了解差异关键点 2
NPZ是由各数组的NPY成员组成的归档。
进一步了解差异进一步了解差异
应考虑访问方式和压缩成本,而不仅是数组数量。不要为不可信的object类型输入启用pickle。
- savez写入非压缩归档;savez_compressed使用DEFLATE。NPZ扩展名不表示是否压缩。
- 数值NPY可进行内存映射,object数组不适用。不要认为普通numpy.load会以相同方式映射NPZ成员。
常见问题
NPZ总比NPY小吗?
不一定。容量受内容、压缩设置和ZIP开销影响。请用实际数据测量容量和加载时间。