Как преобразовать 3-е измерение массива Numpy, загруженного с ImageIO - PullRequest
0 голосов
/ 08 мая 2019

У меня есть простой массив формы (128,128,3), загруженный из PNG с использованием ImageIO.

Кажется, что размер 3 представляет значения RGB.В этом случае все значения для измерения 3 либо [255,255,255], либо [0,0,0] (т. Е. Белые или черные).

Я хочу избавиться от третьего измерения и заменить его одним массивом 1D, содержащим 0 длячерный и 1 для белого.Таким образом, форма конечного результата должна быть (128,128,1).

Я пытался использовать комбинации numpy.reshape и numpy.transpose, но я действительно изо всех сил пытаюсь понять, как это сделать.Я новичок в numpy и Python, поэтому я могу упустить что-то очень простое.

1 Ответ

2 голосов
/ 08 мая 2019

Это не пропало, и это очень просто.Просто индексируйте нужный канал:

im[:, :, 0]

Чтобы преобразовать в нули и единицы, вы можете создать логический массив:

im[:, :, 0].astype(np.bool)

или установить 255 в единицу:

im = im[:, :, 0]
im[im > 0] = 1

Более продвинутый подход к созданию логического массива заключается в просмотре базовых данных в виде логического.Это будет хорошо работать только из коробки, если введено значение uint8:

im[:, :, 0].view(dtype=np.bool)

Наконец, чтобы проиндексировать последнее измерение массива N-мерного размера, вы можете использовать многоточие:

 im[..., 0]

... (или фактическое имя Ellipsis) в индексе означает «используйте : для всех измерений, не указанных явно».Вы можете использовать его не более одного раза в индексе.

В общем, вы захотите прочитать документацию по индексации и позже широковещанию .Там есть несколько более мягких введений, но документальная справка довольно полная и прямо изо рта лошади.

...