Я не уверен, чего вы хотели достичь, используя 2^1
, но использование np.bitwise_and
было правильным подходом.
Например, вы получите результат для канала 1 с помощью np.bitwise_and(digital_word, 1)
:
>>> digital_word = np.array([0,0,1,0,1,0,3,4,5,6])
>>> np.bitwise_and(digital_word, 1)
array([0, 0, 1, 0, 1, 0, 1, 0, 1, 0])
Для битов с более высокими значениями результат почти такой, как вы хотите, но вам нужно сдвинуть его вправо, чтобы получить 1 вместо 2 n .
>>> np.bitwise_and(digital_word, 2)
array([0, 0, 0, 0, 0, 0, 2, 0, 0, 2])
>>> np.bitwise_and(digital_word, 2) >> 1
array([0, 0, 0, 0, 0, 0, 1, 0, 0, 1])
Обратите внимание, что для получения третьего бита необходимо побитовое и с 4 (= 2 3 –1 ), а не 3:
>>> np.bitwise_and(digital_word, 4)
array([0, 0, 0, 0, 0, 0, 0, 4, 4, 4])
>>> np.bitwise_and(digital_word, 4) >> 2
array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1])
В общем, чтобы получить n
th бит:
np.bitwise_and(digital_word, (1 << n)) >> n
NumPy массивы также поддерживают побитовый оператор &
, поэтому это эквивалентно:
(digital_word & (1 << n)) >> n