#python
Вопрос:
У меня есть назначение, которое мне нужно, чтобы создать функцию, получающую X цветовых каналов, и объединить ее в один, например: функция приема:
[[[1]], [[2]]]) → [[[1, 2]]]
но с некоторых пор моя функция возвращает это
[[[1], [2]]]
def combine_channels(channels): channels_num = len(channels[0][0]) channel_row = [] new_channel = [] channel_combine = [] pixle_index = 0 while pixle_index lt; channels_num: for i in image: for j in i: channel_row.append(j[pixle_index]) new_channel.append(channel_row) channel_row = [] channel_combine.append(new_channel) new_channel = [] pixle_index = 1 return channel_combine
NB: Я могу импортировать систему и математику только в том случае, если это как-то поможет.
Комментарии:
1. можете ли вы привести пример ввода для изображения? Или
[[[1,2],[1,2],[1,4]]]
это просто ввод?2. Это и есть пример ввода, который мы получили 🙂
3. Я предполагаю, что у него гораздо больше, так что размер X, Y 2 и N цветовых каналов на пиксель?
4. Да, именно так! его размерность 2 и количество цветовых каналов N на пиксель(хотя бы 1)
5. Тогда разве ввод не является неправильным? можете ли вы проверить пример еще раз? или что [1, 2] [1, 2]… является ли отдельный пиксель?
Ответ №1:
Я не знаю, понял ли я, как выглядит изображение, сделаю предположение, что ваш профессор на самом деле будет вводить вот так:
[ # channels [ # rows [1, 2, 3, ...], # pixels [4, 5, 6, ...], ... ], # channels [ # rows [1, 2, 3, ...], [4, 5, 6, ...], ... ], ]
Код:
gt;gt;gt; def combine_channels(image): ... copy = [] ... for row_pairs in zip(*image): ... copy.append([channel_combined for channel_combined in zip(*row_pairs)]) ... return copy gt;gt;gt; combine_channels([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]]) [[(1, 1), (2, 2), (3, 3)], [(4, 4), (5, 5), (6, 6)]] gt;gt;gt; combine_channels([[[1]], [[2]]]) [[(1, 2)]]
Комментарии:
1. Привет, прежде всего я действительно хочу поблагодарить вас, я действительно ценю вашу помощь! Код правильный, но я только что написал, что случайно скопировал неправильный пример, как вы думали в начале.. Эта функция предполагает получение следующих входных данных : combine_channels([[[1]], [[2]]]) и вернуться : [[[1, 2]]] . В то время как код, который вы написали, возвращает это: [[[1]], [[2]]]. Еще раз большое вам спасибо, я пытаюсь это сделать в течение нескольких часов безрезультатно. К сожалению, я только начал кодировать, и мы получили задачу, которая намного выше нашего уровня..
2. Тогда лучше отредактируйте и обновите вопрос! Что касается нового дела, то какой тогда канал?
3. Я отредактировал вопрос выше 🙂 Функция предполагает получение каналов, а не изображения, и объединение их в изображение. Надеюсь, вы поняли, потому что я сам себя едва понимал. В любом случае, как вы можете видеть, я отредактировал приведенный выше пример 🙂
4. обновлено, если вы предпочитаете список кортежу, оберните
[]
егоlist()
5. Ты приглашен на мою свадьбу. Большая благодарность!