从位编码数组中提取通道
extract channels from bit wise encoded array
我得到了一个按位编码的 3 个通道的数组。
像这样:
1 for channel 1
2 for channel 2
3 for channel 1 and 2
4 for channel 3
5 for channel 1 and 3
6 for channel 3 and 2
我知道如何在 Matlab bitand(digital_word, 2^1)
中使用按位和,但是如果我尝试使用 eg 对 python 做同样的事情。对于频道 1 np.bitwise_and(digital_word, 2^1)
我得到了乱码
如果频道是由位编码的,我想为给定的频道输出一个。
一些示例:
输入:
array([0,0,1,0,1,0,3,4,5,6])
输出:
channel 1: [0,0,1,0,1,0,1,0,1,0]
channel 2: [0,0,0,0,0,0,1,0,0,1]
channel 3: [0,0,0,0,0,0,0,1,1,1]
我不确定您使用 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 而不是 2n.
>>> 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(=23–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
位:
np.bitwise_and(digital_word, (1 << n)) >> n
NumPy 数组也支持 &
按位运算符,所以这等价于:
(digital_word & (1 << n)) >> n
我得到了一个按位编码的 3 个通道的数组。 像这样:
1 for channel 1
2 for channel 2
3 for channel 1 and 2
4 for channel 3
5 for channel 1 and 3
6 for channel 3 and 2
我知道如何在 Matlab bitand(digital_word, 2^1)
中使用按位和,但是如果我尝试使用 eg 对 python 做同样的事情。对于频道 1 np.bitwise_and(digital_word, 2^1)
我得到了乱码
如果频道是由位编码的,我想为给定的频道输出一个。
一些示例:
输入:
array([0,0,1,0,1,0,3,4,5,6])
输出:
channel 1: [0,0,1,0,1,0,1,0,1,0]
channel 2: [0,0,0,0,0,0,1,0,0,1]
channel 3: [0,0,0,0,0,0,0,1,1,1]
我不确定您使用 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 而不是 2n.
>>> 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(=23–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
位:
np.bitwise_and(digital_word, (1 << n)) >> n
NumPy 数组也支持 &
按位运算符,所以这等价于:
(digital_word & (1 << n)) >> n