I have an array which looks like this
[1, 0, 1 , 0 , 0, 1]
And I want to get those indexes that have 1 in it. So here I would get an array of <
Here's one compact way -
2**np.where(a)[0]
Sample run -
In [83]: a = np.array([1, 0, 1 , 0 , 0, 1])
In [84]: 2**np.where(a)[0]
Out[84]: array([ 1, 4, 32])
There is np.where
, np.argwhere
, np.nonzero
and np.flatnonzero
. Take your pick.
np.where
and np.nonzero
are as far as I know equivalent, only there is also a three argument version of where that does something different. np.argwhere
is the transpose and np.flatnonzero
gives flat indices.
you could use enumerate in a list comprehension:
a = [1, 0, 1 , 0 , 0, 1]
b = [2**idx for idx, v in enumerate(a) if v]
b
[1, 4, 32]