#python #numpy #matplotlib #reshape #numpy-ndarray
#python #numpy #matplotlib #изменить #numpy-ndarray
Вопрос:
У меня есть массив numpy, который состоит из всех изображений из набора данных CIFAR10: (50000, 3072)
Я извлекаю из него один массив, его форма (3072,)
затем пытаюсь преобразовать его в изображение RGB, выполнив .reshape(32, 32, 3)
Но когда я передаю его в plt.show(), он показывает что-то вроде
Я не уверен, почему он не отображает изображение правильно, я также пробовал, .reshape(3, 32, 32)
но это дает TypeError: Invalid shape (3, 32, 32) for image data
при построении графика
Как мне изменить его правильно?
Ответ №1:
Вы должны попытаться np.swapaxes()
получить допустимую форму для plt.imshow()
принятия.
import numpy as np
dd = np.array([1]*3072).reshape(3, 32, 32)
dd1 = np.swapaxes(dd, 0, 2)
Попробуйте plt.imshow(dd1)
посмотреть, что произойдет. (используйте свои собственные данные): p
Прежде всего, вы должны изменить форму, используя (3, 32, 32), это определяется порядком ваших данных.
Затем вы должны отобразить измененное изображение, но plt.imshow()
принимает только массив с формой (M, N) или (M, N, 3) или (M, N, 4), поэтому теперь вам нужно поменять оси местами, поскольку измененные данные равны (3, 32, 32). Подробности смотрите на plt.imshow и здесь
Комментарии:
1. построенное изображение поворачивается на 90 градусов против часовой стрелки
2. Вы можете перевернуть или транспонировать изображение с помощью
np.flip
, не уверен, какой из них подходит для вас 🙂3. использование @batman
np.rot90(dd1, 3)
сработало для меня, здесь я поворачиваю изображение на 270 градусов.4. Я думаю, это сработает, только если изображение квадратное. Если есть изображение
img
в форме (3, M, N), где M ! = N, то для преобразования его в (M, N, 3) требуется несколько вызовов функции swapaxes, подобных этому:np.swapaxes(np.swapaxes(img, 0, 1), 1, 2)