Я испытал неожиданное поведение np.save()
.
Предположим, вы хотите сохранить два пустых массива в один файл .npy
(как объект). До тех пор, пока оба массива имеют одинаковую форму, это работает без каких-либо проблем, но когда начальный размер одинаков, возникает ошибка.
Проблема вызвана np.asanyarray()
, который вызывается в np.save()
перед сохранением.
Понятно, что эту проблему можно решить, например, сохранение в разные файлы, но я не ищу другого решения, я хочу понять это поведение np.save()
.
Вот код:
import numpy as np
a = np.zeros((10, 5))
b = np.zeros((10, 2))
np.save('test', [a, b])
Вызывает эту ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/python3/lib/python3.6/site-packages/numpy/lib/npyio.py", line 509, in save
arr = np.asanyarray(arr)
File "/python3/lib/python3.6/site-packages/numpy/core/numeric.py", line 544, in asanyarray
return array(a, dtype, copy=False, order=order, subok=True)
ValueError: could not broadcast input array from shape (10,5) into shape (10)
Когда ведущий размер отличается, проблем нет:
a = np.zeros((9, 5))
b = np.zeros((10, 2))
np.save('test', [a, b])
Для меня такое поведение np.save
противоречиво и кажется ошибкой.