我有一个看起来像这样的数组
[1, 0, 1 , 0 , 0, 1]
我希望得到那些含有1的索引。
所以我在这里得到一个[0, 2 , 5]
的数组
然后基于它我将创建一个新数组,它接受这些数字并用它们指数化2
所以结束数组是
[2**0, 2**2, 2**5]
有没有办法尽快写出来?
答案 0 :(得分:4)
你可以在列表理解中使用枚举:
a = [1, 0, 1 , 0 , 0, 1]
b = [2**idx for idx, v in enumerate(a) if v]
b
[1, 4, 32]
答案 1 :(得分:2)
有np.where
,np.argwhere
,np.nonzero
和np.flatnonzero
。随便挑选。
np.where
和np.nonzero
等同,只有三个参数版本的地方做了不同的事情。 np.argwhere
是转置,np.flatnonzero
给出平坦的索引。
答案 2 :(得分:1)
这是一种紧凑的方式 -
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])