Индексирование с булевыми массивами в многомерные массивы с использованием numpy

Я новичок в использовании numpy, и одна вещь, которую я действительно не понимаю, это массивы индексирования.

В предварительном учебнике приведен пример:

>>> a = arange(12).reshape(3,4)
>>> b1 = array([False,True,True]) # first dim selection
>>> b2 = array([True,False,True,False]) # second dim selection
>>>
>>> a[b1,b2] # a weird thing to do
array([ 4, 10])

Я понятия не имею, почему это последнее. Может ли кто-нибудь объяснить это мне?

Спасибо!

1 ответ

Ваш массив состоит из:

0 1 2 3
4 5 6 7
8 9 10 11

Один из способов индексирования - использовать список целых чисел, указав, какие строки/столбцы включать:

>>> i1 = [1,2]
>>> i2 = [0,2]
>>> a[i1,i2]
array([ 4, 10])

Значение: строка 1 столбец 0, строка 2 столбца 2

Когда вы используете логические индексы, вы указываете, какие строки/столбцы включать, а какие:

>>> b1 = [False,True,True] # 0:no, 1:yes, 2:yes ==> [1,2]
>>> b2 = [True,False,True,False] # 0:yes, 1:no, 2:yes, 3:no ==> [0,2]

Как вы можете видеть, это эквивалентно показанным выше i1 и i2. Следовательно, a[b1,b2] будет иметь тот же результат.

Обратите внимание также, что приведенная выше операция возможна только потому, что как b1, так и b2 имеют одинаковое количество значений True (поэтому они представляют собой два массива одинаковой длины, выраженные в целочисленной форме).

licensed under cc by-sa 3.0 with attribution.