#numpy
Вопрос:
У меня есть следующий массив numpy:
a = np.array([[0, 1], [1, 0]])
Что мне с этим делать, чтобы все было так:
np.array([[[0, 0, 0], [255, 255, 255]], [[255, 255, 255], [0, 0, 0]]])
Каждый 0 преобразуется в [0, 0, 0]
, а каждый 1 в [255, 255, 255]
.
Я пробовал разные способы умножения, но это не помогло.
Мне нужно, чтобы такое преобразование было как можно быстрее, потому a
что предполагается, что в нем должно быть миллион элементов, и я хочу сохранить их в изображении, поэтому мне нужно подготовить необработанные данные для PIL.Image.fromarray
. Мне нужен именно формат RGB, потому что после завершения преобразования a
я добавляю несколько цветных дополнительных пикселей в определенных координатах.
Ответ №1:
С помощью базовой индексации массивов вы можете достичь того, чего хотите:
# Example input:
a = np.array([[0, 1], [1, 0]]) # Your index
x = np.array([[0, 0, 0], [255, 255, 255]]) # The mapped array
# Get the result:
r = x[a]
Ответ №2:
Вы можете либо заменить каждое из значений на a [[[256, 256, 256]]]
, либо [[[0, 0, 0]]]
:
np.where(a.reshape(*a.shape, 1), np.full([1, 1, 3], 255), np.full([1, 1, 3], 0))
Или повторите весь массив 3 раза, а затем соответствующим образом измените форму:
np.repeat(a * 255, 3).reshape(*a.shape, 3)