Индексирование в массиве numpy

#python #numpy

#python #numpy

Вопрос:

Дана таблица поиска:

 colors = [  [0,0,0],
            [0, 255, 0],
            [0, 0, 255],
            [255, 0, 0]]
 

И ввод матрицы numpy с индексом 2×2:

 a = np.array([[0,1],[1,1]])
 

Как я могу сопоставить a с матрицей 2x2x3 b, где b[i][j] = colors[a[i][j]] ? Я хочу избежать использования цикла for здесь.

Ответ №1:

А вы пробовали:

 colors[a]
 

Вот полный пример:

 import numpy as np

colors = np.array([[0,0,0],
                   [0, 255, 0],
                   [0, 0, 255],
                   [255, 0, 0]
                  ])
a = np.array([[0, 1], [1, 1]])

new = colors[a]
new.shape
# (2, 2, 3)
new
# array([[[  0,   0,   0],
#         [  0, 255,   0]],
#
#        [[  0, 255,   0],
#         [  0, 255,   0]]])
 

Комментарии:

1. Обратите внимание, что вы переопределяете цвета здесь, используя массив numpy, в противном случае вы получите сообщение об ошибке с «OP colors».

2. @agstudy, очень верно. Если colors это список списков, вы можете индексировать его только с помощью фрагментов или целых чисел.