восстановить dict из 0-го массива - PullRequest
50 голосов
/ 02 декабря 2011

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

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

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

recdict = dict(mydict)

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

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

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

Заранее спасибо!

Ответы [ 2 ]

69 голосов
/ 02 декабря 2011

Используйте 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!'}
23 голосов
/ 03 декабря 2011

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

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