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