Маска последние три бита в массиве NumPy - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть двумерный массив со следующими уникальными значениями:

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

Я хочу замаскировать эти значения в двумерном массиве, где ЛЮБОЙ из последних 3 битовзначение равно 1. Я делаю это, но не уверен, правильно ли это или действительно лучший способ достичь этого:

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

1 Ответ

0 голосов
/ 08 февраля 2019

Предполагая, что:

маскирует эти значения в массивном двумерном массиве, где ANY из последних 3 битов значения равно 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...