Индексирование с помощью логических массивов в многомерные массивы с использованием numpy - PullRequest
6 голосов
/ 27 марта 2012

Я новичок в использовании 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 Ответ

6 голосов
/ 27 марта 2012

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

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 (поэтому они представляют двамассивы одинаковой длины при выражении в целочисленной форме).

...