NP транспонировать и сжимать не имеют никакого эффекта - PullRequest
1 голос
/ 04 апреля 2019

Я загружаю изображения через

batches =datagen.flow_from_directory(...)

Я хочу построить примерное изображение, чтобы увидеть дополнения датагератором.

display(img_batch[0].shape)

показывает мне (1, 256, 256, 3)

Тогда я перенесу

image = img_batch[i].transpose((2,1,3,0))

Здесь происходит первая «ошибка». Обычно я переносил бы на

image = img_batch[i].transpose((2,1,3))

но тогда я получаю ошибку

ValueError: оси не соответствуют массиву

Так что я транспонирую как показано и получаю

(256, 256, 3, 1)

Так что я думаю, np.squeez мог бы решить эту проблему, но когда я использую любую вариацию

np.squeeze(image,(3,))

просто ничего не происходит, форма до и после шоу одинаковая.

Понятия не имею, что происходит. У кого-нибудь есть идея? Спасибо

1 Ответ

2 голосов
/ 04 апреля 2019

Вам необходимо присвоить переменную np.squeeze(image,(3,)), она не будет вносить изменения в переменную на месте.

image = np.squeeze(image,(3,))

Затем image.shape вернется(256, 256, 3)

В качестве примечания вы можете вызвать squeeze без указания axis в вашем случае, так как функция по умолчанию удалит измерения длины 1.

Редактироватьоб использовании транспонирования:

В numpy функция transpose ожидает, что axis будет кортежем того же размера, что и число измерений массива, который вы транспонируете.

В вашем случае image - это 4-мерный массив (как вы его транспонируете перед сжатием), поэтому, когда вы вызываете transpose с axis=(2, 1, 3), он поднимает ValueError.Вызов его с 4-мерным аргументом кортежа работает, как и ожидалось.

Если вы сжимаете перед транспонированием, то вы можете вызвать транспонирование с axis, являющимся 3-мерным кортежем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...