You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

numpy.savez与numpy.savez_compressed是否自动使用pickle?

numpy.savez 与 numpy.savez_compressed 对 pickle 的使用说明

是的,当保存**对象数组(dtype=object)**时,numpy.savez 和 numpy.savez_compressed 会在后台自动使用 pickle 进行序列化。

原因在于:numpy 的原生二进制存储格式(.npy/.npz)仅支持内置数值类型、结构化数组等原生可表示的数据。对于包含 Python 对象的数组(比如你示例中指定 dtype=object 的字符串数组,或是其他自定义 Python 对象),numpy 无法用原生格式直接存储,必须借助 pickle 将这些对象序列化为字节流后,再写入 .npz 文件。

你遇到的 ValueError: Object arrays cannot be loaded when allow_pickle=False,是因为 numpy.load 默认禁用了 pickle 反序列化(出于安全防护,避免加载恶意构造的 pickle 数据)。要读取这类对象数组,必须显式开启 allow_pickle=True:

data = np.load("test.npz", allow_pickle=True)
print(data["strings"])

需要注意的是:如果保存的是 numpy 原生支持的类型(比如示例中的 numbers 浮点数组),则不会触发 pickle 的使用,完全用 numpy 原生格式存储。只有当数组包含无法用 numpy 原生格式表示的 Python 对象时,才会自动依赖 pickle。

内容的提问来源于stack exchange,提问作者tnknepp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 17:07:09