давайте сделаем несколько сохранений в один файл:
In [92]: ofile = open('test.npy', 'ab')
In [93]: np.save(ofile, np.array([], object))
In [94]: arr = np.array([], object)
In [95]: arr = np.append(arr, np.array([1,2,3]))
In [96]: arr
Out[96]: array([1, 2, 3], dtype=object)
In [97]: arr = np.append(arr, np.array([1,2,3]))
In [98]: arr
Out[98]: array([1, 2, 3, 1, 2, 3], dtype=object)
In [99]: np.save(ofile, arr)
In [100]: np.save(ofile, np.arange(12).reshape(3,4))
In [101]: ofile.close()
Выполните обычную загрузку:
In [103]: np.load('test.npy', allow_pickle=True)
Out[103]: array(['✪'], dtype=object)
Похоже, я получил этот оригинальный массив []
, но каково его содержимое?
Вместо этого откройте файл и попробуйте повторить загрузку:
In [107]: f = open('test.npy', 'rb')
In [108]: np.load(f, allow_pickle=True)
Out[108]: array(['✪'], dtype=object) # one
In [109]: np.load(f, allow_pickle=True)
Out[109]: array([], dtype=object) # two
In [110]: np.load(f, allow_pickle=True)
Out[110]: array([1, 2, 3, 1, 2, 3], dtype=object) # three
In [111]: np.load(f, allow_pickle=True) # four
Out[111]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
In [112]: np.load(f, allow_pickle=True)
---------------------------------------------------------------------------
EOFError
Так что да, можно сохранить и загрузить несколько массивов в один файл, но это не так, как было задумано.np.savez
предназначен для сохранения нескольких файлов.А сохранение массивов dtype объекта может быть проблематичным.Их буфер данных имеет указатели на объекты, находящиеся где-то в памяти.Указатели недопустимы в последовательности сохранения / загрузки.Так что вместо этого нужно использовать травление.