从0维numpy数组恢复字典

72 投票
3 回答
36155 浏览
提问于 2025-04-17 07:34

发生的事情是,我(不小心)用命令 numpy.save() 保存了一个字典(没有显示错误信息),现在我需要恢复字典里的数据。当我用 numpy.load() 加载它时,它变成了类型为 numpy.ndarray 的东西,并且是0维的,所以它不再是字典了,我无法访问里面的数据。0维数组是不能用索引访问的,所以像下面这样做

mydict = numpy.load('mydict')
mydict[0]['some_key'] 

是行不通的。我也试过

recdict = dict(mydict)

但那也不行。

为什么在我用 numpy.save() 保存字典的时候,numpy没有给我警告呢?

有没有办法恢复数据呢?

提前谢谢你们!

3 个回答

3

这是一种方法,用来恢复使用了 'allow_pickle=True''.tolist()'dict类型 数据。
希望这对你有帮助。

numpy.save('mydict.npy', org_dict)

# load & convert type to dict
mydict = numpy.load('mydict.npy', allow_pickle=True)
re_dict = mydict.tolist()

print('re_dict :', type(re_dict), re_dict)   # 're_dict' is '<type dict>' 
32

0维数组可以用空的元组来索引:

>>> import numpy as np
>>> x = np.array({'x': 1})
>>> x
array({'x': 1}, dtype=object)
>>> x[()]
{'x': 1}
>>> type(x[()])
<type 'dict'>
104

使用 mydict.item() 可以把数组中的元素提取出来,变成一个普通的Python数值。

>>> import numpy as np
>>> np.save('/tmp/data.npy',{'a':'Hi Mom!'})
>>> x=np.load('/tmp/data.npy')
>>> x.item()
{'a': 'Hi Mom!'}

撰写回答