如何在 Python 中进行幂运算
本教程将演示如何在 Python 中进行幂运算/指数计算。
在数学中,幂运算/指数运算是一个数字与自身相乘的操作。
Python 提供了内置的操作和函数来帮助执行幂运算。
在 Python 中使用**
运算符来进行幂运算
大多数开发人员似乎认为插入符号^
是获取数字幂的运算符,因为插入符号在数学中被用作指数的符号。然而,在大多数编程语言中,插入符号被保留给按位 xor
运算符。
在 Python 中,指数运算符由基数和指数之间的两个连续的星号**
来表示。
指数运算符的功能补充了乘法运算符*
的行为,不同的是指数运算符中的第二个操作数是用来设置第一个操作数与自己相乘的次数。
print(5 ** 6)
要将数字 5
与自身相乘 6
倍,请在基本操作数 5
和指数操作数 6
之间使用操作数**
。
输出:
15625
让我们在不同类型的数值上测试这个运算符。
我们将初始化一个整数、一个负数、零和两个小于 1
和大于 1
的浮点数。然后我们将分配随机整数作为它们的指数。
num1 = 2
num2 = -5
num3 = 0
num4 = 1.025
num5 = 0.5
print(num1, "^12=", num1 ** 12)
print(num2, "^4=", num2 ** 4)
print(num3, "^9999=", num3 ** 9999)
print(num4, "^-3=", num4 ** -3)
print(num5, "^8=", num5 ** 8)
输出:
2^12= 4096
-5^4= 625
0^9999= 0
1.025^-3= 0.928599410919749
0.5^8= 0.00390625
在 Python 中使用 pow()
或 math.power()
做指数运算
在 Python 中做指数的另一种方法是使用函数 pow()
,该函数被设计用来对给定基数和指数的值进行指数化。math
模块也有自己的 pow()
的实现,用于同样的目的。
这两个函数都有 2 个参数,第一个参数是基数,第二个是指数。
让我们尝试用相同的参数多次调用这两个函数,以便比较它们的输出。
import math
print(pow(-8, 7))
print(math.pow(-8, 7))
print(pow(2, 1.5))
print(math.pow(2, 1.5))
print(pow(4, 3))
print(math.pow(4, 3))
print(pow(2.0, 5))
print(math.pow(2.0, 5))
输出:
-2097152
-2097152.0
2.8284271247461903
2.8284271247461903
64
64.0
32.0
32.0
结果的唯一区别是 math.pow()
即使传递了整数参数,也总是返回一个 float
值,而 pow()
只有当至少有一个 float
参数时才会返回 float
。
在 Python 中使用 numpy.np()
做指数运算
模块 NumPy
也有自己的指数函数 power()
。power()
接受与 pow()
函数相同的参数,其中第一个参数是基础值,第二个参数是指数值。
要使用 NumPy
,我们应该通过 pip
或 pip3
安装它。
- Python 2:
pip install numpy
- Python 3:
pip3 install numpy
让我们用 numpy.power()
在 pow()
中打印出同一组例子。
print(np.power(-8, 7))
print(np.power(2, 1.5))
print(np.power(4, 3))
print(np.power(2.0, 5))
输出:
-2097152
2.8284271247461903
64
32.0
power()
产生的输出和内置的 Python 函数 pow()
一样,如果没有 float
参数,它将返回一个整数。
比较每个解决方案的运行时间
我们来比较一下这 3 个函数和**
运算符在大指数值下运行的时间。对于计时函数,我们会导入 timeit
模块来打印出每个解的运行时间。
基数的值是 2
,指数的值是 99999
。
import numpy as np
import math
import time
start = time.process_time()
val = 2 ** 99999
print("** took", time.process_time() - start, "ms")
start = time.process_time()
val = pow(2, 99999)
print("pow() took", time.process_time() - start, "ms")
start = time.process_time()
val = np.power(2, 99999)
print("np.power() took", time.process_time() - start, "ms")
start = time.process_time()
val = math.pow(2, 99999)
print("math.pow() took", time.process_time() - start, "ms")
输出:
** took 0.0006959999999999744 ms
pow() took 0.00039000000000000146 ms
np.power() took 1.6999999999989246e-05 ms
Traceback (most recent call last):
File "/Users/rayven/python/timeit.py", line 15, in <module>
val = math.pow(2,99999)
OverflowError: math range error
最明显的是 math.pow()
产生了一个 OverflowError
。这意味着 math.pow()
不能支持大值指数,很可能是因为这个模块实现指数的方式。
其他 3 种方法之间的区别是微不足道的,但从这个例子来看,np.power()
是执行指数化最快的函数。
如果我们尝试将指数还原为 9999
呢?让我们看看 math.pow()
的输出结果。
** took 1.0000000000010001e-05 ms
pow() took 4.000000000004e-06 ms
np.power() took 2.0000000000020002e-05 ms
math.pow() took 2.9999999999752447e-06 ms
相关文章
在 Python 中将 NumPy 数组转换为列表
发布时间:2023/12/24 浏览次数:102 分类:Python
-
本教程演示了如何将 numpy 数组转换为 Python 中的列表。列表和数组是 Python 中两个最基本且最常用的集合对象。
Python 中追加二维数组
发布时间:2023/12/24 浏览次数:158 分类:Python
-
本教程讨论如何在 Python 中将值附加到二维数组。在 Python 中,我们可以有 ND 数组。我们可以使用 NumPy 模块在 Python 中处理数组。
在 Python 中将数组写入文本文件
发布时间:2023/12/24 浏览次数:68 分类:Python
-
本教程演示如何在 python 中将数组保存到文本文件中。读取和写入文件是构建许多用户使用的程序的一个重要方面。Python 提供了一系列可用于资源处理的方法。
Python 导出到 Excel
发布时间:2023/12/24 浏览次数:129 分类:Python
-
有四种主要方法可用于在 Python 中将数据写入 Excel 文件,DataFrame.to_excel() 方法、xlwt 库、openpyxl 库和 XlsWriter 库。
使用 Selenium Python 在浏览器中打开和关闭标签页
发布时间:2023/12/24 浏览次数:92 分类:Python
-
本教程演示了如何在 Python 中使用 Selenium 在浏览器中自动打开一个新标签页。Selenium 是强大的 Web 自动化和测试工具。我们使用 Selenium 编写脚本,它可以控制 Web 浏览器并执行特定操作。
Conda 安装 Cv2
发布时间:2023/12/24 浏览次数:106 分类:Python
-
本教程演示了如何在 Python 中为 anaconda 用户安装 cv2 模块。互联网上有许多可用的 Python IDE。一种这样的 Python IDE 是 Anaconda,这是一种开源软件
使用 OpenCV solvepnp() 函数解决 PnP 问题
发布时间:2023/12/24 浏览次数:85 分类:Python
-
本教程讨论在 Python 中使用 OpenCV 中的 solvepnp 函数。OpenCV 库是一个开源库,旨在帮助完成计算机视觉任务。
Python 中 NumPy 数组的滑动平均值
发布时间:2023/12/24 浏览次数:145 分类:Python
-
本教程演示了如何在 python 中计算 numpy 数组的滑动平均值。滑动平均值通常用于通过计算特定时间间隔的数据平均值来研究时间序列数据。
在 Python 中计算马氏距离
发布时间:2023/12/24 浏览次数:125 分类:Python
-
有两个主要方法可用于在 Python 中查找两个 NumPy 数组之间的马氏距离,scipy 库中的 cdist() 函数和 numpy 包中的 numpy.einsum() 函数。