使用numpy将布尔数组用作多维数组的索引

6
我是一个新手使用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个回答

7
你的数组包括:
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]

如您所见,这等同于上面显示的i1i2。因此,a[b1,b2]将有相同的结果。

请注意,上述操作之所以可行,是因为b1b2都具有相同数量的True值(因此,在整数形式中表示时它们代表长度相同的两个数组)。


这是一个进一步阅读的链接,http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html - Bi Rico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接