第90天:NumPy 位运算与算术函数

简介: 第90天:NumPy 位运算与算术函数

今天的文章和大家聊聊 Python Numpy 位运算和算术函数,本文将分两部分做详细描述。


Numpy 位运算


NumPy包中,可用位操作函数进行位运算,以 bitwise_ 开头的函数是位运算函数。

NumPy 位运算函数如下:



函数 描述
bitwise_and 对数组元素执行位与运算
bitwise_or 对数组元素执行位或运算
invert 按位取反(位非运算)
left_shift 向左移动二进制表示的位(左移位)
right_shift 向右移动二进制表示的位(右移位)


值得注意的是: 位运算同样可以使用操作符进行计算,分别是使用 "&"、 "~"、 "|" 和 "^" 等。


1、bitwise_and


bitwise_and() 函数对数组中整数的二进制形式执行位与运算。


实例:


a, b = 13, 17print('13 和 17 的二进制:')print(bin(a), bin(b))print('\n')
print('13 和 17 的位与:')print(np.bitwise_and(a,b))

输出结果:


13 和 17 的二进制:0b1101 0b10001
13 和 17 的位与:1


位与运算规律如下:

A B AND
1 1 1
1 0 0
0 1 0
0 0 0


13 和 17 的位与运算规律运算如下:



1 1 0 1

1 0 0 0 1
AND





0 0 0 0 1


所以 13 和 17 位与运算结果为 1


2、bitwise_or


bitwise_or()函数对数组中整数的二进制形式执行位或运算。


实例:


import numpy as np
# Numpy 位或运算a, b = 13, 17print('13 和 17 的二进制:')print(bin(a), bin(b))print('\n')
print('13 和 17 的位或:')print(np.bitwise_or(a,b))


输出结果为:


13 和 17 的二进制形式:0b1101 0b1000113 和 17 的位或:29


位或运算规律如下:

A B OR
1 1 1
1 0 1
0 1 1
0 0 0


运算结果为:



1 1 0 1
OR





1 0 0 0 1

1 1 1 0 1


最后的运算结果为:29, 即数字 29 的二进制为 11101,正是以上实例或运算结果。


3、invert



invert() 函数是对数值进行位非操作,位非即数值的取反操作。invert() 函数对数组中整数进行位取反运算,即 0 变成 1,1 变成 0。


对于有符号整数,取该数二进制数的补码,然后 +1;二进制数最高位为0表示正数,最高位为 1 表示负数。


实例:


import numpy as np
# 比较 13 和 242 的二进制表示,发现了位的反转print('13 的二进制表示:')print(np.binary_repr(13, width=8))print('\n')
print('242 的二进制表示:')print(np.binary_repr(242, width=8))
print('13 的位反转:')print(np.invert(np.array([13], dtype=np.uint8)))print('\n')


输出结果为:


13 的二进制表示:00001101
242 的二进制表示:11110010
13 的位反转:[242]


4、left_shift

left_shift() 函数将数组元素的二进制形式向左移动到指定位置,右侧附加相等数量的 0。

实例:



import numpy as np
print('将 10 左移两位:')print(np.left_shift(10, 2))print('\n')
print('10 的二进制表示:')print(np.binary_repr(10, width=8))print('\n')
print('40 的二进制表示:')print(np.binary_repr(40, width=8))#  '00001010' 中的两位移动到了左边,并在右边添加了两个 0。

输出结果为:



将 10 左移两位:40
10 的二进制表示:00001010
40 的二进制表示:00101000


5、right_shift

right_shift() 函数将数组元素的二进制形式向右移动到指定位置,左侧附加相等数量的 0。



import numpy as np
print('将 40 右移两位:')print(np.right_shift(40, 2))print('\n')
print('40 的二进制表示:')print(np.binary_repr(40, width=8))print('\n')
print('10 的二进制表示:')print(np.binary_repr(10, width=8))#  '00001010' 中的两位移动到了右边,并在左边添加了两个 0。


输出结果为:


将 40 右移两位:10
40 的二进制表示:00101000
10 的二进制表示:00001010


Numpy 算术函数


1、介绍及函数明细


Numpy 算术函数-->算术函数顾名思义就是加、减、乘、除的意思,即add(),subtract(),multiply() 和 divide()等。但值得注意的是数组必须具有相同的形状或符合数组广播规则。


NumPy 中涵盖的算术运算通过下表展示,除了基本的算术运算函数外,下表中还列出对应的指数和对数函数,详细信息如下:


方法 描述
add() 按元素添加参数
subtract() 从元素方面减去参数
multiply() 在元素方面乘以论证
divide() 以元素方式返回输入的真正除法
logaddexp() 输入的取幂之和的对数
logaddexp2() base-2中输入的取幂之和的对数
true_divide() 以元素方式返回输入的真正除法
floor_divide() 返回小于或等于输入除法的最大整数
negative() 数字否定, 元素方面
positive() 数字正面, 元素方面
power() 第一个数组元素从第二个数组提升到幂, 逐个元素
remainder() 返回除法元素的余数
mod() 返回除法元素的余数
fmod() 返回除法的元素余数
divmod() 同时返回逐元素的商和余数
absolute() 逐个元素地计算绝对值
fabs() 以元素方式计算绝对值
rint() 将数组的元素舍入为最接近的整数
sign() 返回数字符号的元素指示
heaviside() 计算Heaviside阶跃函数
conj() 以元素方式返回复共轭
conjugate() 以元素方式返回复共轭
exp() 计算输入数组中所有元素的指数
exp2() 计算输入数组中所有 p 的 2**p
log() 自然对数, 元素方面
log2() x的基数为2的对数
log10() 以元素方式返回输入数组的基数10对数
expm1() 计算数组中的所有元素吗,exp(x) - 1
log1p() 返回一个加上输入数组的自然对数, 逐个元素
sqrt() 以元素方式返回数组的非负平方根
square() 返回输入的元素方块
cbrt() 以元素方式返回数组的立方根
reciprocal() 以元素方式返回参数的倒数
gcd() 返回最大公约数
lcm() 返回 最小公倍数


2、实例详解


2.1、add()


add() 表示两个数组相加,add() 函数使用方法如下:

add(数组1,数组2,…)

实例:


import numpy as np
a = np.arange(16, dtype = np.int_).reshape(4,4)print('第一个数组:')print(a)print('\n')
print('第二个数组:')b = np.array([10, 10, 10, 10])print(b)print('\n')
# 两个数组相加print('两个数组相加:')print(np.add(a, b))print('\n')


以上结果输出为:


第一个数组:[[ 0  1  2  3] [ 4  5  6  7] [ 8  9 10 11] [12 13 14 15]]
第二个数组:[10 10 10 10]
两个数组相加:[[10 11 12 13] [14 15 16 17] [18 19 20 21] [22 23 24 25]]


由上可得结论,数组之间的相加维度、数据类型必须一致。


2.2、subtract()


subtract()表示两个数组相减,subtract() 函数使用方法如下:subtract(数组1,数组2,…)

实例:


import numpy as np
a = np.arange(16, dtype = np.int_).reshape(4,4)print('第一个数组:')print(a)print('\n')
print('第二个数组:')b = np.array([10, 10, 10, 10])print(b)print('\n')
print('两个数组相减:')print(np.subtract(a, b))print('\n')


以上结果输出为:


第一个数组:[[ 0  1  2  3] [ 4  5  6  7] [ 8  9 10 11] [12 13 14 15]]
第二个数组:[10 10 10 10]
两个数组相减:[[-10  -9  -8  -7] [ -6  -5  -4  -3] [ -2  -1   0   1] [  2   3   4   5]]


2.3、multiply()


multiply() 表示两个数组相乘,multiply() 函数使用方法:multiply(数组1,数组2,…)

实例:



import numpy as np
a = np.arange(16, dtype = np.int_).reshape(4,4)print('第一个数组:')print(a)print('\n')
print('第二个数组:')b = np.array([10, 10, 10, 10])print(b)print('\n')
print('两个数组相乘:')print(np.multiply(a, b))print('\n')


输出结果为:



第一个数组:[[ 0  1  2  3] [ 4  5  6  7] [ 8  9 10 11] [12 13 14 15]]
第二个数组:[10 10 10 10]
两个数组相乘:[[  0  10  20  30] [ 40  50  60  70] [ 80  90 100 110] [120 130 140 150]]


2.4、divide()


divide() 表示两个数组相除,divide() 使用方法为:divide(数组1,数组2,…)

实例:



import numpy as np
a = np.arange(16, dtype = np.int_).reshape(4,4)print('第一个数组:')print(a)print('\n')
print('第二个数组:')b = np.array([10, 10, 10, 10])print(b)print('\n')
print('两个数组相除:')print(np.divide(a, b))


输出结果为:



第一个数组:[[ 0  1  2  3] [ 4  5  6  7] [ 8  9 10 11] [12 13 14 15]]
第二个数组:[10 10 10 10]
两个数组相除:[[0.  0.1 0.2 0.3] [0.4 0.5 0.6 0.7] [0.8 0.9 1.  1.1] [1.2 1.3 1.4 1.5]]


2.5 log()


log() 函数是取数的对数 实例:


import numpy as np
# 数的对数测试c = 100print('数字100的对数:')print(np.log(c))

输出结果为:



数字100的对数:4.605170185988092


2.6 numpy.power()


numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。


实例:



# NumPy 幂计算import numpy as np
d = np.array([2, 5, 10])print('第一个数组是:')print(d)
print('\n')print('调用 power 函数:')print(np.power(d, 2))
print('\n')print('第二个数组:')e = np.array([1, 2, 3])print(e)print('\n')print('再次调用 power 函数:')print(np.power(d, e))


输出结果为:



第一个数组是:[ 2  5 10]
调用 power 函数:[  4  25 100]
第二个数组:[1 2 3]
再次调用 power 函数:[   2   25 1000]


总结


本章节是 NumPy 位运算和算术函数运用的基本介绍,这部分的知识实例都是从简单入手,对于一个知识点,难的是综合运用,只有根基牢固才能造出大 House,希望对使用这部分知识的工程师提供更好的支撑。


参考


https://www.runoob.com/numpy/numpy-arithmetic-operations.htmlhttps://www.numpy.org.cn/reference/ufuncs.html#%E6%95%B0%E5%AD%A6%E8%BF%90%E7%AE%97https://numpy.org/devdocs/reference/routines.math.html

文中示例代码:https://github.com/JustDoPython/python-100-day

目录
相关文章
|
3月前
|
Python
NumPy 教程 之 NumPy 统计函数 9
NumPy提供了多种统计函数,如计算数组中的最小值、最大值、百分位数、标准差及方差等。其中,标准差是一种衡量数据平均值分散程度的指标,它是方差的算术平方根。例如,对于数组[1,2,3,4],其标准差可通过计算各值与均值2.5的差的平方的平均数的平方根得出,结果为1.1180339887498949。示例代码如下: ```python import numpy as np print(np.std([1,2,3,4])) ``` 运行输出即为:1.1180339887498949。
128 50
|
4月前
|
Python
NumPy 教程 之 NumPy 算术函数 2
NumPy 教程 之 NumPy 算术函数 2
35 3
|
3月前
|
Python
NumPy 教程 之 NumPy 统计函数 10
NumPy统计函数,包括查找数组中的最小值、最大值、百分位数、标准差和方差等。方差表示样本值与平均值之差的平方的平均数,而标准差则是方差的平方根。例如,`np.var([1,2,3,4])` 的方差为 1.25。
102 48
|
2月前
|
Python
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
NumPy库中的`np.concatenate`和`np.append`函数,它们分别用于沿指定轴拼接多个数组以及在指定轴上追加数组元素。
45 0
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
|
3月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 8
NumPy提供了多种排序方法,包括快速排序、归并排序及堆排序,各有不同的速度、最坏情况性能、工作空间和稳定性特点。此外,NumPy还提供了`numpy.extract()`函数,可以根据特定条件从数组中抽取元素。例如,在一个3x3数组中,通过定义条件选择偶数元素,并使用该函数提取这些元素。示例输出为:[0., 2., 4., 6., 8.]。
30 8
|
3月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 5
NumPy中的排序方法及特性对比,包括快速排序、归并排序与堆排序的速度、最坏情况性能、工作空间及稳定性分析。并通过`numpy.argmax()`与`numpy.argmin()`函数演示了如何获取数组中最大值和最小值的索引,涵盖不同轴方向的操作,并提供了具体实例与输出结果,便于理解与实践。
28 5
|
3月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 2
介绍NumPy` 中的排序方法与条件筛选函数。通过对比快速排序、归并排序及堆排序的速度、最坏情况性能、工作空间需求和稳定性,帮助读者选择合适的排序算法。此外,还深入讲解了 `numpy.argsort()` 的使用方法,并通过具体实例展示了如何利用该函数获取数组值从小到大的索引值,并据此重构原数组,使得其变为有序状态。对于学习 `NumPy` 排序功能来说,本教程提供了清晰且实用的指导。
40 7
|
3月前
|
算法 索引 Python
Numpy 的一些以 arg 开头的函数
Numpy 的一些以 arg 开头的函数
51 0
|
4月前
|
Python
NumPy 教程 之 NumPy 统计函数 4
这段内容介绍了NumPy库中的统计函数,特别是`numpy.percentile()`函数的应用。该函数用于计算数组中的百分位数,即一个值之下所包含的观测值的百分比。通过实例展示了如何使用此函数来计算不同轴上的百分位数,并保持输出的维度不变。
37 5
|
4月前
|
存储 Serverless 索引
NumPy 教程 之 NumPy 统计函数 3
这段教程介绍了 NumPy 中的 `numpy.ptp()` 函数,该函数用于计算数组中最大值与最小值之间的差值。通过不同参数设置,如 `axis`、`out` 和 `keepdims` 等,可以在不同维度上进行计算。示例展示了如何使用 `ptp()` 函数对二维数组进行整体及按行、列计算峰峰值。
42 3