1

I saw someone indexing an array with a boolean array. I have done some researches and tested the following code

import numpy as np
A=np.arange(30)
A.shape = (10,3)

this gives the matrix

>>> A
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11],
       [12, 13, 14],
       [15, 16, 17],
       [18, 19, 20],
       [21, 22, 23],
       [24, 25, 26],
       [27, 28, 29]])

Then I did this

B = A<10

This gives

B=array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True],
       [ True, False, False],
       [False, False, False],
       [False, False, False],
       [False, False, False],
       [False, False, False],
       [False, False, False],
       [False, False, False]], dtype=bool)

And

A[B]
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

Here's my question, I tried this by entering the exactly same array instead of putting in the variable B, and it turned out to be an error

>>> A[[[ True,  True,  True],
...        [ True,  True,  True],
...        [ True,  True,  True],
...        [ True, False, False],
...        [False, False, False],
...        [False, False, False],
...        [False, False, False],
...        [False, False, False],
...        [False, False, False],
...        [False, False, False]]]
Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
IndexError: too many indices for array

What have I done wrong, and what makes the difference?

Thanks

2
  • 2
    In the second method you are entering as list, which doesn't do boolean masking as with the first method of A[B]. Commented Mar 15, 2017 at 12:11
  • 1
    In some cases indexing with an array and a list is the same, but this isn't one of those. Commented Mar 15, 2017 at 16:40

2 Answers 2

2

B is an array but [ True, False, .. ] is a list.

This is the same:

A[np.array([[ True,  True,  True],
           [ True,  True,  True],
           [ True,  True,  True],
           [ True, False, False],
           [False, False, False],
           [False, False, False],
           [False, False, False],
           [False, False, False],
           [False, False, False],
           [False, False, False]])]
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Sign up to request clarification or add additional context in comments.

Comments

1

use:

A[np.array([[ True,  True,  True],
    [ True,  True,  True],
    [ True,  True,  True],
    [ True, False, False],
    [False, False, False],
    [False, False, False],
    [False, False, False],
    [False, False, False],
    [False, False, False],
    [False, False, False]])]

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.