使用numpy将布尔数组索引到多维数组中
问题描述:
我是使用numpy的新手,有一件事我真的不明白索引数组。使用numpy将布尔数组索引到多维数组中
在tentative tutorial有这样的例子:
>>> 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])
我不知道为什么它是最后一件事。任何人都可以向我解释?
谢谢!
答
你的阵列包括:
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
值(因此,它们代表在整数形式表示当相同长度的两个阵列)。
+1这里是一个链接,供进一步阅读,http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html – 2012-03-27 06:24:24