[Numpy-discussion] How does Boolean indexing work?

Anne Archibald peridot.faceted at gmail.com
Tue Jun 3 23:59:28 EDT 2008


Hi,

I thought it might be useful to summarize the different ways to use
numpy's indexing, slice and fancy. The document so far is here:

http://www.scipy.org/Cookbook/Indexing

While writing it I ran into some puzzling issues. The first of them
is, how is Boolean indexing supposed to work when given more than one
array? What I mean is, suppose we have the following array:

In [3]: A = np.arange(9)

In [4]: B = np.reshape(A,(3,3))

In [5]: B
Out[5]:
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

Then we can use boolean indexing to select some rows or some columns:

In [12]: B[np.array([True,False,True]),:]
Out[12]:
array([[0, 1, 2],
       [6, 7, 8]])

In [13]: B[:,np.array([True,False,True])]
Out[13]:
array([[0, 2],
       [3, 5],
       [6, 8]])

But if you supply Boolean arrays in both row and column places, rather
than select the corresponding rows and columns, you get something
basically mysterious:
In [14]: B[np.array([True,False,True]),np.array([True,True,False])]
Out[14]: array([0, 7])

In [15]: B[np.array([True,False,True]),np.array([True,False,False])]
Out[15]: array([0, 6])

In [16]: B[np.array([True,False,True]),np.array([True,True,True])]
---------------------------------------------------------------------------
<type 'exceptions.ValueError'>            Traceback (most recent call last)

/home/peridot/<ipython console> in <module>()

<type 'exceptions.ValueError'>: shape mismatch: objects cannot be
broadcast to a single shape

What is going on here?

Thanks,
Anne



More information about the NumPy-Discussion mailing list