Попробуйте запустить images.dtype
.Что это возвращает?Если это dtype('O')
, это объясняет вашу проблему: images
- это не список, а массив Numpy типа object
, который обычно является Bad Idea ™ ️.Технически это будет одномерный массив, содержащий несколько трехмерных массивов.
Массив Numpy лучше всего подходит для использования с числовыми данными.Они достаточно гибки, чтобы содержать произвольные объекты Python, но это сильно ухудшает их функциональность и эффективность.Если у вас нет четкой причины, почему вы должны просто использовать простой список Python []
в этих ситуациях.
Возможно, вам лучше всего преобразовать images
в 4D массив, так как этоединственный способ, которым images.nbytes
будет работать правильно.Вы не можете сделать это, если ваши изображения имеют разные размеры, но, учитывая, что все они имеют одинаковую форму (x, y, z)
, это на самом деле довольно просто:
images = np.array([a for a in images])
Теперь images.shape
будет (n, x, y, z)
,где n
- общее количество изображений.Вы можете получить доступ к трехмерному массиву, который представляет i
-ое изображение, просто индексировав images
:
image_i = images[i]
В качестве альтернативы, вы можете преобразовать images
в обычный список Python:
images = images.to_list()
Если вы не хотите беспокоиться ни о каком из этих преобразований, вы всегда можете получить размер всех подмассивов с помощью итерации:
totalsize = sum(arr.nbytes for arr in images)