# [NumPy-Tickets] [NumPy] #2069: boolean indexing with no matches should leave shape same

NumPy Trac numpy-tickets@scipy....
Mon Mar 12 13:04:34 CDT 2012

```#2069: boolean indexing with no matches should leave shape same
--------------------+-------------------------------------------------------
Reporter:  shaunc  |       Owner:  somebody
Type:  defect  |      Status:  new
Priority:  normal  |   Milestone:  Unscheduled
Component:  Other   |     Version:  1.6.1
Keywords:          |
--------------------+-------------------------------------------------------

Old description:

> >>> a = array( [ [ 1, 1 ] ] )
> >>> a[ a == 0 ].shape
> (0, )
>
> This is also puzzling as:
> >>> aa == 0
> array([[False, False]], dtype=bool)
>
> >>> b = [ [ False, False ] ]
> >>> a [ b ]
> >>> aa[ bb ]
> array([[1, 1],
>         [1, 1]])

New description:

{{{
>>> a = array( [ [ 1, 1 ] ] )
>>> a[ a == 0 ].shape
(0, )
}}}

This is also puzzling as:
{{{
>>> aa == 0
array([[False, False]], dtype=bool)

>>> b = [ [ False, False ] ]
>>> a [ b ]
>>> aa[ bb ]
array([[1, 1],
[1, 1]])
}}}

--

Comment(by mwiebe):

The first thing you're seeing is by design. NumPy picks out the the array
elements which are flagged with True, and returns them compressed into a
one-dimensional array.

The second thing you're seeing is a bug. The fancy indexing code is
treating the [[False, False]] as an integer array, so is using the False
values as an integer index instead of as a boolean. If you force it to be
a boolean array, it works as expected:

{{{
In [10]: a[b]
Out[10]:
array([[1, 1],
[1, 1]])

In [11]: a[np.array(b)]
Out[11]: array([], dtype=int32)
}}}

--
Ticket URL: <http://projects.scipy.org/numpy/ticket/2069#comment:1>
NumPy <http://projects.scipy.org/numpy>
My example project
```