Python函数在二进制数组和

时间:2017-12-08 09:50:53

标签: python numpy

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

[1, 0, 1 , 0 , 0, 1]

我希望得到那些含有1的索引。 所以我在这里得到一个[0, 2 , 5]的数组 然后基于它我将创建一个新数组,它接受这些数字并用它们指数化2 所以结束数组是

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

有没有办法尽快写出来?

3 个答案:

答案 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.wherenp.argwherenp.nonzeronp.flatnonzero。随便挑选。

据我所知,

np.wherenp.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])