使用numpy将布尔数组索引到多维数组中

mdl*_*lha 6 python arrays indexing numpy scipy

我是新手使用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])
Run Code Online (Sandbox Code Playgroud)

我不知道它为什么会这样做.任何人都可以向我解释一下吗?

谢谢!

mgi*_*nbr 6

您的数组包括:

0  1  2  3
4  5  6  7
8  9 10 11
Run Code Online (Sandbox Code Playgroud)

索引它的一种方法是使用整数列表,指定要包含的行/列:

>>> i1 = [1,2]
>>> i2 = [0,2]
>>> a[i1,i2]
array([ 4, 10])
Run Code Online (Sandbox Code Playgroud)

含义:第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]
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,这等同于i1i2如上图所示.因此,a[b1,b2]将得到相同的结果.

还请注意,上述操作是唯一可能的,因为这两个b1b2具有相同数目的True值(因此,它们代表在整数形式表示当相同长度的两个阵列).