简体   繁体   中英

numpy array indexing with boolean

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

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])

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]])]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM