Python函数在二进制数组中查找1的索引,并

Python函数在二进制数组中查找1的索引,并,python,numpy,Python,Numpy,我有一个数组,看起来像这样 [1, 0, 1 , 0 , 0, 1] 我想得到那些包含1的索引。 所以这里我会得到一个[0,2,5] 然后在这个基础上,我会创建一个新的数组,用这些数字表示2 因此,结束数组是 [2**0, 2**2, 2**5] 有没有办法尽可能快地写出它?您可以在列表理解中使用enumerate: a = [1, 0, 1 , 0 , 0, 1] b = [2**idx for idx, v in enumerate(a) if v] b 输出: 这里有一条捷径- 2*

我有一个数组,看起来像这样

[1, 0, 1 , 0 , 0, 1]
我想得到那些包含1的索引。 所以这里我会得到一个
[0,2,5]
然后在这个基础上,我会创建一个新的数组,用这些数字表示2 因此,结束数组是

[2**0, 2**2, 2**5]

有没有办法尽可能快地写出它?

您可以在列表理解中使用enumerate:

a = [1, 0, 1 , 0 , 0, 1]
b = [2**idx for idx, v in enumerate(a) if v]
b
输出:
这里有一条捷径-

2**np.where(a)[0]
样本运行-

In [83]: a = np.array([1, 0, 1 , 0 , 0, 1])

In [84]: 2**np.where(a)[0]
Out[84]: array([ 1,  4, 32])

np.where
np.argwhere
np.nonzero
np.flatnorzero
。你挑吧

据我所知,
np.where
np.nonzero
是等价的,只有三个参数版本的where做了一些不同的事情
np.arg其中
是转置,而
np.flatnonzero
给出平坦索引

In [83]: a = np.array([1, 0, 1 , 0 , 0, 1])

In [84]: 2**np.where(a)[0]
Out[84]: array([ 1,  4, 32])