NumPy 位运算
NumPy "bitwise_" 开头的函数是位运算函数。
NumPy 位运算包括以下几个函数:
函数 | 描述 |
---|---|
bitwise_and | 对数组元素执行位与操作 |
bitwise_or | 对数组元素执行位或操作 |
invert | 按位取反 |
left_shift | 向左移动二进制表示的位 |
right_shift | 向右移动二进制表示的位 |
注:也可以使用 "&"、 "~"、 "|" 和 "^" 等操作符进行计算。
1、bitwise_and
bitwise_and() 函数对数组中整数的二进制形式执行位与运算。
1 import numpy as np 2 print('13 和 17 的二进制形式:') 3 a, b = 13, 17 4 print(type(a)) 5 print(bin(a), bin(b)) 6 print('13 和 17 的位与:') 7 print(np.bitwise_and(13, 17)) 8 print(a & b)
执行结果:
1 13 和 17 的二进制形式: 2 <class 'int'> 3 0b1101 0b10001 4 13 和 17 的位与: 5 1 6 1
以上实例可以用下表来说明:
1 | 1 | 0 | 1 | ||
---|---|---|---|---|---|
AND | |||||
1 | 0 | 0 | 0 | 1 | |
运算结果 | 0 | 0 | 0 | 0 | 1 |
2、bitwise_or
bitwise_or()函数对数组中整数的二进制形式执行位或运算
1 import numpy as np 2 a, b = 13, 17 3 print('13 和 17 的二进制形式:') 4 print(bin(a), bin(b)) 5 print('13 和 17 的位或:') 6 print(np.bitwise_or(13, 17)) 7 print(a | b)
执行结果
13 和 17 的二进制形式: 0b1101 0b10001 13 和 17 的位或: 29 29
以上实例可以用下表来说明:
1 | 1 | 0 | 1 | ||
---|---|---|---|---|---|
OR | |||||
1 | 0 | 0 | 0 | 1 | |
运算结果 | 1 | 1 | 1 | 0 | 1 |
3、invert
invert() 函数对数组中整数进行位取反运算,即 0 变成 1,1 变成 0。
1 import numpy as np 2 print('13 的二进制表示:') 3 print(np.binary_repr(13, width=8)) 4 print('242 的二进制表示:') 5 print(np.binary_repr(242, width=8)) 6 print('13 的位反转,其中 ndarray 的 dtype 是 uint8:') 7 print(np.invert(np.array([13], dtype=np.uint8)))
执行结果:
13 的二进制表示: 00001101 242 的二进制表示: 11110010 13 的位反转,其中 ndarray 的 dtype 是 uint8: [242]
4、left_shift
left_shift() 函数将数组元素的二进制形式向左移动到指定位置,右侧附加相等数量的 0。
1 import numpy as np 2 print('10 的二进制表示:') 3 print(np.binary_repr(10, width=8)) 4 print('40 的二进制表示:') 5 print(np.binary_repr(40, width=8)) 6 print('将 10 左移两位:') 7 print(np.left_shift(10, 2)) 8 print('\n')
执行结果:
10 的二进制表示: 00001010 40 的二进制表示: 00101000 将 10 左移两位: 40
5、right_shift
right_shift() 函数将数组元素的二进制形式向右移动到指定位置,左侧附加相等数量的 0。
1 import numpy as np 2 print('40的二进制表示:') 3 print(np.binary_repr(40, width=8)) 4 print('10的二进制表示:') 5 print(np.binary_repr(10, width=8)) 6 print('将40右移两位:') 7 print(np.right_shift(40, 2))
执行结果:
import numpy as np print('40的二进制表示:') print(np.binary_repr(40, width=8)) print('10的二进制表示:') print(np.binary_repr(10, width=8)) print('将40右移两位:') print(np.right_shift(40, 2))