Список с массивами, различающимися по 2-му измерению:
In [118]: alist = [np.ones((2,3)), np.zeros((2,5)), np.arange(12).reshape(2,6)]
Ваша ошибка:
In [119]: np.array(alist, dtype=object)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-119-357020ce4a02> in <module>
----> 1 np.array(alist, dtype=object)
ValueError: could not broadcast input array from shape (2,3) into shape (2)
Правильный способ создания массива объектов:
In [120]: arr = np.empty(3, object)
In [121]: arr[:] = alist
In [122]: arr
Out[122]:
array([array([[1., 1., 1.],
[1., 1., 1.]]),
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]]),
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]])], dtype=object)
save
работает:
In [123]: np.save('test.npy', arr)
In [124]: ll test.npy
-rw-rw-r-- 1 paul 708 Jul 8 20:13 test.npy
savez
работает, с почти таким же net размером файла:
In [125]: np.savez('test.npz', *arr)
In [126]: ll test.npz
-rw-rw-r-- 1 paul 972 Jul 8 20:13 test.npz
Почему numpy .save производит Файл размером 100 МБ для sys.getsizeof 0,33 МБ данных? - это пример, где массивы различаются по первому измерению.
Базовая c точка - это np.save
записывает массив; он пытается внести список в массив. Массив из массивов разного размера выходит за пределы numpy
. Об этом начинает нас предупреждать последняя версия 1.19.