从0维numpy数组恢复字典
发生的事情是,我(不小心)用命令 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!'}