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.