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

如何将包含numpy数组的Python字典保存到文件并还原原格式

嘿,这个问题我之前处理大numpy数组的时候也碰到过!给你几个亲测有效的方案,都能完美保留numpy数组类型,而且不用手动遍历数组:

方案1:使用Python原生的pickle模块

pickle是Python自带的序列化工具,能直接把包含numpy数组的整个字典保存下来,完全保留原有的数据类型,操作也超简单。

import pickle
import numpy as np

# 模拟你的目标字典(300维大数组)
my_dict = {"big_300d_array": np.random.rand(10000, 300)}

# 保存到文件(二进制模式)
with open("saved_dict.pkl", "wb") as f:
    pickle.dump(my_dict, f)

# 从文件加载回字典
with open("saved_dict.pkl", "rb") as f:
    loaded_dict = pickle.load(f)

# 验证:检查数组类型和内容是否一致
print(type(loaded_dict["big_300d_array"]))  # 输出 <class 'numpy.ndarray'>
print(np.array_equal(my_dict["big_300d_array"], loaded_dict["big_300d_array"]))  # 输出 True

优点:无需额外安装依赖,直接序列化整个对象,不用处理数组的任何细节;注意点:pickle文件是二进制不可读的,且不同Python版本间可能存在兼容性问题,但你已经说明不在意可读性,所以完全没问题。

方案2:使用numpy自带的savez_compressed

如果你的字典里全是numpy数组(像你描述的这样),numpy的savez_compressed是个绝佳选择——它不仅能保存多个数组,还会自动压缩文件,节省磁盘空间,而且完全保留numpy数组类型。

import numpy as np

my_dict = {"big_300d_array": np.random.rand(10000, 300)}

# 用**把字典拆成键值对传入,自动以键作为数组名
np.savez_compressed("saved_dict.npz", **my_dict)

# 加载文件并转回字典
loaded_npz = np.load("saved_dict.npz")
loaded_dict = {key: loaded_npz[key] for key in loaded_npz}

# 验证
print(type(loaded_dict["big_300d_array"]))
print(np.array_equal(my_dict["big_300d_array"], loaded_dict["big_300d_array"]))

优点:numpy原生支持,压缩效果好,加载速度快;注意点:只适用于字典值全是numpy数组的情况,如果以后字典里加了其他类型的数据,这个方法就不适用了。

方案3:使用joblib(针对超大数组更高效)

joblib是专门为处理大numpy数组设计的序列化工具,比pickle在大数据场景下速度更快、压缩比更高,很多机器学习项目里都会用它来保存模型或大数组。

首先需要安装joblib:

pip install joblib

然后使用代码:

from joblib import dump, load
import numpy as np

my_dict = {"big_300d_array": np.random.rand(10000, 300)}

# 保存字典
dump(my_dict, "saved_dict.joblib")

# 加载字典
loaded_dict = load("saved_dict.joblib")

# 验证
print(type(loaded_dict["big_300d_array"]))
print(np.array_equal(my_dict["big_300d_array"], loaded_dict["big_300d_array"]))

优点:对超大numpy数组的序列化/反序列化效率极高,压缩效果优秀;注意点:需要额外安装依赖,但安装过程非常简单。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:47:40