Составьте массив из нескольких массивов:
In [98]: arr = np.array([np.ones(10), np.zeros((200,300)),np.arange(1000).reshape(100,10)],object)
Общее использование памяти:
In [100]: sum([a.nbytes for a in arr]+[arr.nbytes])
Out[100]: 488104
Сохраните его и проверьте размер файла
In [103]: np.save('test.npy', arr, allow_pickle=True)
In [104]: ll test.npy
-rw-rw-r-- 1 paul 488569 Jul 8 17:46 test.npy
Это достаточно близко!
Архив npz занимает примерно такое же пространство:
In [106]: np.savez('test.npz', *arr)
In [107]: ll test.npz
-rw-rw-r-- 1 paul 488828 Jul 8 17:49 test.npz
Но сжатие помогает значительно:
In [108]: np.savez_compressed('test.npz', *arr)
In [109]: ll test.npz
-rw-rw-r-- 1 paul 2643 Jul 8 17:50 test.npz
Я подозреваю, что он настолько сжимаем, потому что самый большой массив все нули. С массивами случайных значений одинакового размера сжатие только до 454909.