np.load
(или клон) - единственная причина для загрузки npy
:
In [84]: adict = {'a':np.arange(3), 'b':np.ones((2,3),int)}
In [85]: np.save('foo.npy',adict)
In [86]: np.load('foo.npy')
Out[86]:
array({'a': array([0, 1, 2]), 'b': array([[1, 1, 1],
[1, 1, 1]])}, dtype=object)
Обратите внимание, что словарь был заключен в массив dtype объекта 0d.Структура словаря была тогда pickled
.И массивы со словарем были засолены в формате np.save
.И словарь, и объектный массив dtype могут содержать указатели на другие объекты Python, которые нуждаются в собственном методе выбора.Другими словами, это Python до самого конца!.
Если бы вы попытались использовать json
, вы бы обнаружили, что массивы numpy не сериализуемы в json.Вам бы пришлось применить tolist()
, чтобы превратить массивы в списки.json
просто сохраняет словари, списки и строки (базовые структуры javascript, которые разделяют многие языки).Также может быть сторонний сериализатор для numy массивов.
h5
написан на C ++, с большим количеством языковых интерфейсов.h5dump
удобный просмотрщик.Но чтобы написать словарь из вашего Python-словаря, вам придется использовать h5py
(или pytables
).Словарь хорошо отображает группы h5, а массивы - наборы данных h5.