NumPy学习第十二课:Numpy的位运算

180 阅读4分钟

前言导读

大家好,今天我们学习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的二进制 111
8的二进制 1000
结果 0000

所得的结果会自动转换成十进制为我们输出。所以结果是0

2、bitwise_or
实例代码
# 2.bitwise_and
x, y = 6, 7
print(np.bitwise_or(x, y))

# 输出结果
# 7
  
6的二进制 110
7的二进制 111
结果 111

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的二进制 110
7的二进制 111
结果 001

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

相关参考:www.runoob.com/numpy/numpy…