前言导读
大家好,今天我们学习NumPy位运算,位运算是一种在二进制数字的位级别上进行操作的一类运算,NumPy提供 了一系列的位运算操作,这些操作可以直接对数组进行处理,这使得NumPy在处理数值运算时具有很大的优势。 位运算它主要的作用就是应用于优化和处理底层数据,这些操作都可以应用于整型或布尔型的NumPy数组。对于浮点型数组,NumPy会先将其转换为整型,然后进行位运算。
接下来我们用一张表列表NumPy位运算都有哪些函数
函数表
| 函数名称 | 描述 |
|---|---|
| bitwise_and | 按位与,对数组元素执行位与操作 |
| bitwise_or | 按位或,对数组元素执行位或操作 |
| bitwise_xor | 按位异或 |
| bitwise_not | 按位取反 |
| invert | 按位取反 |
| left_shift | 左移位运算,向左移动二进制表示的位 |
| right_shift | 右移位运算,向右移动二进制表示的位 |
接下来,我们将这些函数在编辑器中调用一下,知道这些函数怎么用,在什么时候用。 这些函数调用的话还是比较简单的,这边我们就直接上测试代码。
概念
首先我们得理解什么是按位与,按位或。这些名词的概念如果不知道的话, 下面的东西有可能是无法进行的。
按位与:对应位上的两个数字都为1时,结果为1;否则,结果为0
按位或:对应位上的两个数字有一个为1时,结果为1;否则,结果为0
按位异或:对应位上的两个数字相异时,结果为1;相同时,结果为0
按位取反:对数字的每个位取反,即0变为1,1变为0
函数的应用
1、bitwise_and
实例代码
import numpy as np
# 1.bitwise_and
x, y = 7, 8
print(np.bitwise_and(x, y))
# 输出结果
# 0
运算过程
可以看到,上面的输出结果是0,那么为什么是0,是怎么算出来的呢?
因为它调用的是bitwise_and函数,这是位运算函数,所以,底层运算会先进行二进制,然后在进行运算,那么我们就计算一下数字7和8的二进制数分别是多少,然后根据相关位运算的概念进行验算就行了,后面其他的函数调用都是得先换算成二进制数再进行运算的。
7的二进制数是111; 8的二进制数是1000
然后我们列一个表格可以看的清楚些
| 7的二进制 | 1 | 1 | 1 | ||
| 8的二进制 | 1 | 0 | 0 | 0 | |
| 结果 | 0 | 0 | 0 | 0 |
所得的结果会自动转换成十进制为我们输出。所以结果是0
2、bitwise_or
实例代码
# 2.bitwise_and
x, y = 6, 7
print(np.bitwise_or(x, y))
# 输出结果
# 7
| 6的二进制 | 1 | 1 | 0 | ||
| 7的二进制 | 1 | 1 | 1 | ||
| 结果 | 1 | 1 | 1 |
6 和 7 bitwise_or以后的二进制为111,111转换为十进制就是7
3、bitwise_xor
实例代码
# 3.bitwise_and
x, y = 6, 7
print(np.bitwise_xor(x, y))
# 输出结果
# 1
| 6的二进制 | 1 | 1 | 0 | ||
| 7的二进制 | 1 | 1 | 1 | ||
| 结果 | 0 | 0 | 1 |
6 和 7 bitwise_xor以后的二进制为1,1转换为十进制就是1
4、bitwise_not
实例代码
# 4.bitwise_not
print(np.bitwise_not(5))
# 输出结果:-6
5、invert
实例代码
# 5.invert
print(np.bitwise_not(5))
# 输出结果:-6
6、left_shift
left_shift() 函数将数组元素的二进制形式向左移动到指定位置,右侧附加相等数量的 0
这个函数很好理解的。我们也直接进行测试就行。
实例代码
# 5.left_shift
print(np.left_shift(5, 2))
# 输出结果:20
运算过程
5的二进制是101,然后我们是将二进制数向左移动,那就是给后面加两个0
结果就变成了10100,然后会将10100转换为十进制数,就是20。
7、right_shift
right_shift() 函数将数组元素的二进制形式向右移动到指定位置,左侧附加相等数量的 0
实例代码
# 6.left_shift
print(np.right_shift(5, 2))
# 输出结果:1