Питонический способ присвоения массива 3-го измерения Numpy массиву 1D - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь сгладить изображение, которое было преобразовано в трехмерный массив, в три отдельных одномерных массива, представляющих каналы RGB.

Массив изображения имеет форму (HEIGHT, WIDTH, RGB), и я тщетно пытался использовать как разрезание индекса, так и разархивирование, чтобы просто вернуть значения 3-го измерения.

В идеале три отдельных массива представляют каждый канал RGB,

Пример:

print(image)
[
[ [56, 6, 3], [23, 32, 53], [27, 33, 56] ],
[ [57, 2, 3], [23, 246, 49], [29, 253, 58] ]
]


red_channel, green_channel, blue_channel = get_third(image)
print(red_channel)
[56, 23, 27, 57, 23, 29]

Я думал об использовании вложенного цикла for для итерации первых двух измерений, а затем добавления каждого массива RGB в список или чего-то еще, но я понимаю, что это было бы неэффективно и немного раздражало. .

Заранее спасибо!

EDIT

Уточнение. Под разархивированием я подразумеваю использование оператора звезды (*) внутри функции zip, например:

zip(*image)

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

1 Ответ

1 голос
/ 29 апреля 2019
red_channel, green_channel, blue_channel = np.transpose(np.reshape(image, (-1, 3)))
...