Подтвердить что ты не робот

Восстановить dict из массива 0-d numpy

Случилось так, что я (по ошибке) сохранил словарь с командой numpy.save() (никаких сообщений об ошибках), и теперь мне нужно восстановить данные в словаре. Когда я загружаю его с помощью numpy.load(), он имеет тип (numpy.ndarray) и равен 0-d, поэтому он больше не является словарем, и я не могу получить доступ к данным в нем, массивы 0-d не являются индексными поэтому делать что-то вроде

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

не работает. Я также пробовал

recdict = dict(mydict)

но это тоже не сработало.

Почему numpy не предупредил меня, когда я сохранил словарь с numpy.save()?

Есть ли способ восстановить данные?

Спасибо заранее!

4b9b3361

Ответ 1

Используйте 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!'}

Ответ 2

0-d массивы могут быть проиндексированы с использованием пустого набора:

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