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

将Numpy数组保存为字典后,加载结果无法按字典调用怎么办?

解决Numpy保存字典后无法按键访问的问题

我明白你遇到的问题了——用np.save存字典,加载后得到的是个ndarray,没法直接用键访问里面的数组对吧?这是因为np.save默认会把非数组对象(比如字典)包装成一个0维的ndarray存储,加载后你拿到的其实是包裹着字典的数组,自然不能直接用键索引啦。

下面给你两种靠谱的解决方案:

方案1:加载时启用pickle支持

如果你还是想用np.save的方式,只需要在加载的时候加上allow_pickle=True参数,让Numpy正确还原里面的字典对象:

import numpy as np
x = np.arange(10)
y = np.array([100, 101, 102, 103, 104, 105, 106, 107])
z = {'X': x, 'Y': y}
np.save('./data.npy', z)
# 加载时添加allow_pickle=True
z1 = np.load('./data.npy', allow_pickle=True)
print(type(z1))  # 现在输出是<class 'dict'>
print(z1['X'])   # 正常输出array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

不过要注意:pickle存在一定的安全风险,如果你加载的文件来源不可信,不建议用这个方法。

方案2:用np.savez专门存储多数组(更推荐)

Numpy提供了np.savez(或压缩版np.savez_compressed)来专门保存多个数组,这是更规范的做法,而且不需要依赖pickle:

import numpy as np
x = np.arange(10)
y = np.array([100, 101, 102, 103, 104, 105, 106, 107])
# 直接把数组作为关键字参数传入,键名就是你要的索引名
np.savez('./data.npz', X=x, Y=y)
# 加载后得到NpzFile对象,用法和字典一致
z1 = np.load('./data.npz')
print(z1['X'])  # 正常输出目标数组
print(z1['Y'])
# 用完记得关闭文件对象(或者用with语句)
z1.close()

这种方式不仅安全,而且结构更清晰,适合存储多个关联的数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:09:33