Можно восстановить данные:
In [41]: a = {'0': {'A': array([1,2,3]), 'B': array([4,5,6])}}
In [42]: np.savez('/tmp/model.npz', **a)
In [43]: a = np.load('/tmp/model.npz')
Обратите внимание, что dtype является «объектом».
In [44]: a['0']
Out[44]: array({'A': array([1, 2, 3]), 'B': array([4, 5, 6])}, dtype=object)
И в массиве есть только один элемент. Этот элемент является питоновым типом!
In [45]: a['0'].size
Out[45]: 1
Вы можете получить значение с помощью метода item()
(NB: это не метод items()
для словарей, все, что присуще классу NpzFile
, но является numpy.ndarray.item()
методом , который копирует значение в массиве в стандартные сканеры Python . В массиве object
dtype любое значение, хранящееся в ячейке массива (даже словарь), является скаляром Python:
In [46]: a['0'].item()
Out[46]: {'A': array([1, 2, 3]), 'B': array([4, 5, 6])}
In [47]: a['0'].item()['A']
Out[47]: array([1, 2, 3])
In [48]: a['0'].item()['B']
Out[48]: array([4, 5, 6])
Чтобы восстановить a
как dict dicts:
In [84]: a = np.load('/tmp/model.npz')
In [85]: a = {key:a[key].item() for key in a}
In [86]: a['0']['A']
Out[86]: array([1, 2, 3])