Numpy 位运算
在Numpy中,以 bitwise_ 开头的函数是位运算函数。Numpy 位运算包括以下几个函数:
函数 | 描述 |
---|---|
bitwise_and | 对数组元素执行位与操作 |
bitwise_or | 对数组元素执行位或操作 |
invert | 按位取反 |
left_shift | 向左移动二进制表示的位 |
right_shift | 向右移动二进制表示的位 |
1. 位运算
与普通运算不同,位运算是发生在二进制形式之间的,因此在演示位运算之前,先将数据进行十进制到二进制的转换。
1.1 numpy.bitwise_and函数
numpy.bitwise_and 函数对数组中整数的二进制形式执行位与运算。
案例
查看两个整数的位与运算结果:
a, b = 13, 17
print(np.bitwise_and(a, b))
打印结果为:
1
先看看a和b的转换为二进制的结果:
print("a 的二进制为:", bin(a))
print("b 的二进制为:", bin(b))
打印结果为:
a 的二进制为: 0b1101
b 的二进制为: 0b10001
a和b的位与运算可以用下表来说明:
a | 0 | 1 | 1 | 0 | 1 |
---|---|---|---|---|---|
b | 1 | 0 | 0 | 0 | 1 |
AND | 0 | 0 | 0 | 0 | 1 |
00001 转化为 2 进制为 1。
1.2 numpy.bitwise_or 函数
numpy.bitwise_or 函数对数组中整数的二进制形式执行位或运算。
案例
查看两个整数的位或运算结果:
print(np.bitwise_or(a, b))
打印结果为:
29
a和b的位或运算可以用下表来说明:
a | 0 | 1 | 1 | 0 | 1 |
---|---|---|---|---|---|
b | 1 | 0 | 0 | 0 | 1 |
OR | 1 | 1 | 1 | 0 | 1 |
11101转化为十进制是24+23+22+1=29
1.3 numpy.invert函数
numpy.invert函数对数组中整数进行位取反运算,即 0 变成 1,1 变成 0。
对于有符号整数,取该二进制数的补码,然后 加1。二进制数,最高位为0表示正数,最高位为 1 表示负数。
如下是 ~1 的计算步骤:
- 将**
1
**(这里叫:原码)转二进制 =00000001
; - 按位取反 =
11111110
; - 发现符号位(即最高位)为**
1
**(表示负数),将除符号位之外的其他数字取反 =10000001
; - 末位加1取其补码 =
10000010
; - 转换回十进制 =
-2
。
案例
print('1的二进制表示', np.binary_repr(1, width = 8))
print('1的位反转为', np.invert(1))
打印结果为:
1的二进制表示 00000001
1的位反转为 -2
1.4 numpy.left_shift 函数
numpy.left_shift 函数将数组元素的二进制形式向左移动到指定位置,右侧附加相等数量的 0。
案例
print('10的二进制表示:', np.binary_repr(10, width = 8))
print('10左移2位的结果:', np.left_shift(10, 2))
打印结果为:
10的二进制表示: 00001010
10左移2位的结果: 40
查看 40 的二进制:
print('40的二进制表示:', np.binary_repr(40, width = 8))
40的二进制表示: 00101000
综合比较 10 和 40 的二进制转换结果,可以直观了解 numpy.left_shift 函数的运算过程。
1.5 numpy.right_shift函数
numpy.right_shift 函数将数组元素的二进制形式向右移动到指定位置,左侧附加相等数量的 0。
案例
print('40的二进制表示:', np.binary_repr(40, width = 8))
print('40右移2位的结果:', np.right_shift(40, 2))
打印结果为:
40的二进制表示: 00101000
40右移2位的结果: 10
查看 40 的二进制:
print('10的二进制表示:', np.binary_repr(10, width = 8))
10的二进制表示: 00001010
综合上述步骤,可以直观了解numpy.left_shift函数的运算过程。
2. 小结
本小节讲解了 Numpy 中常用的位运算,与普通运算不同,位运算是发生在二进制形式之间的,读者可通过观察二进制的转化过程进行学习。