Ваш вопрос и пример немного сбивают с толку, но обычно, если вы хотите сосредоточиться на определенных битах, вы можете применить двоичный оператор и &
с правильной маской. Итак, если вы хотите выбрать «8:12 бит» в 16-битном целом числе без знака, эта маска будет 0b0000000011110000
, что составляет 240
.
Например, с arr = np.random.randint(0, 2 ** 16 - 1, (6, 6))
, я имею получил
array([[28111, 29985, 2056, 24534, 2837, 49004],
[ 7584, 8798, 38715, 40600, 26665, 51545],
[34279, 8134, 16112, 59336, 15373, 46839],
[ 131, 12500, 11779, 44852, 57627, 50253],
[63222, 60588, 9191, 3033, 18643, 8975],
[17299, 62925, 31776, 10933, 59953, 28443]])
, а затем np.ma.masked_where(arr & 240, arr)
дает
masked_array(
data=[[--, --, 2056, --, --, --],
[--, --, --, --, --, --],
[--, --, --, --, 15373, --],
[--, --, 11779, --, --, --],
[--, --, --, --, --, 8975],
[--, --, --, --, --, --]],
mask=[[ True, True, False, True, True, True],
[ True, True, True, True, True, True],
[ True, True, True, True, False, True],
[ True, True, False, True, True, True],
[ True, True, True, True, True, False],
[ True, True, True, True, True, True]],
fill_value=999999)
, что соответствует тому, что вы получите, используя for
l oop.