Как добавить измерения в массив в результате умножения в numpy?

#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)