Numpy Необычное индексирование, приводящее к выделению с другой формой - PullRequest
1 голос
/ 07 января 2020

Из следующего фрагмента:

>>> palette = np.array( [ [0,0,0],                # black
...                       [255,0,0],              # red
...                       [0,255,0],              # green
...                       [0,0,255],              # blue
...                       [255,255,255] ] )       # white
>>> image = np.array( [ [ 0, 1, 2, 0 ],           # each value corresponds to a color in the palette
...                     [ 0, 3, 4, 0 ]  ] )
>>> brush = palette[image]                            # the (2,4,3) color image
array([[[  0,   0,   0],
        [255,   0,   0],
        [  0, 255,   0],
        [  0,   0,   0]],
       [[  0,   0,   0],
        [  0,   0, 255],
        [255, 255, 255],
        [  0,   0,   0]]])

Переменная brush имеет форму (2,4,3). Кто-нибудь может объяснить, как / почему применение (2,4) -образного фильтра к (5,3) -образному массиву приводит к массиву формы (2,4,3).?

Ответы [ 2 ]

1 голос
/ 07 января 2020

palette[image[0]] возвращает двумерный массив формы (4,3), полученный путем объединения строк 0, 1, 2 и 0 в palette. Аналогично palette[image[1]] суммирует строки 0, 3, 4, 0 из palette. palette[image] складывает два 2-мерных массива palette[image[0]] и palette[image[1]], чтобы сформировать трехмерный массив формы (2, 4, 3).

1 голос
/ 07 января 2020

Поскольку ваша маска (в данном случае массив image) - это массив с формой (2,4). Каждый элемент, выбранный маской, представляет собой 1d массив с 3 элементами. Таким образом, brush будет иметь форму (2,4,3).

. Это может помочь вам увидеть форму массива brush: enter image description here

Цитировать из Numpy документации :

В общем случае форма результирующего массива будет конкатенацией формы массива индексов (или формы, которой являются все индексные массивы). были переданы) с формой любых неиспользуемых измерений (не проиндексированных) в индексируемом массиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...