屏蔽numpy数组中的最后三位

时间:2019-02-07 23:23:18

标签: python numpy

我有一个具有以下唯一值的numpy 2D数组:

[ 64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79 128 129
 131 132 133 134 135 136 137 138 139 140 141 142 143 192 193 194 195 196
 197 198 199 200 201 202 203 204 205 206 207 255]

我想屏蔽numpy 2D数组中的那些值,其中值的最后3位的 ANY 为1。我正在执行此操作,但不确定是否正确或确实最好的方法:

mask = ((arr & 3) == 0)

1 个答案:

答案 0 :(得分:1)

假设是:

  

屏蔽numpy 2D数组中的那些值,其中值的后3位中的 ANY 为1

您的意思是“ 选择三个最低有效位中的任何一个都不为零的元素”,您可以这样做:

mask = np.bitwise_and(arr, 0b111) > 0

可以说,使用函数numpy.bitwise_and代替&运算符可以使代码更具可读性。

样品运行

In [35]: arr = np.arange(17)

In [36]: arr
Out[36]: array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16])

In [37]: mask = np.bitwise_and(arr, 0b111) > 0

In [38]: mask
Out[38]: 
array([False,  True,  True,  True,  True,  True,  True,  True, False,
        True,  True,  True,  True,  True,  True,  True, False])

In [39]: for x in arr[mask]:
    ...:     b = bin(x)
    ...:     print('{}{:0>5}'.format(b[:2], b[2:]))
    ...: 
    ...: 
0b00001
0b00010
0b00011
0b00100
0b00101
0b00110
0b00111
0b01001
0b01010
0b01011
0b01100
0b01101
0b01110
0b01111