一种在 Python 中循环的超快速方法
你觉得 Python 慢吗?这是一种在 Python 中循环的快速方法
Python以慢速编程语言而闻名。尽管 Python 比其他语言慢是一个事实,但还是有一些方法可以加快我们的 Python 代码速度。
如何?很简单,优化你的代码。
如果我们编写的代码消耗很少的内存和存储空间,我们不仅可以完成工作,还可以让我们的 Python 代码运行得更快。
这是我在我参加的一门 Python 课程中学到的一种快速且超快速的循环 Python 方法(我们从未停止学习!)。[0]
The average loop
假设我们想对从 1 到 100000000 的数字求和(我们可能永远不会这样做,但这个大数字将帮助我表达我的观点)。
一种典型的方法是创建一个变量 total_sum=0,循环遍历一个范围,并在每次迭代时将 total_sum 的值增加 i。
这可以完成工作,但大约需要 6.58 秒。
虽然现在看起来并没有那么慢,但是当你在范围内的数字上添加更多的 0 时,它会变得更慢。
让我们加快速度!
使用内置函数的更快循环方式
在 Python 中循环的一种更快的方法是使用内置函数。
在我们的示例中,我们可以将 for 循环替换为 sum 函数。此函数将对数字范围内的值求和。
上面的代码需要 0.84 秒。这比我们之前使用的循环要快得多!这就是为什么我们应该选择内置函数而不是循环。
但仍有改进的余地。
一种使用 Numpy 进行循环的超快速方法
几周前,在我参加的一门数据科学课程中,我了解到要成为一名更好的数据科学家,我应该遵循的软件工程实践之一就是优化我的代码。[0]
我们可以通过向量化操作来优化循环。这比纯 Python 等价物快一/两个数量级(尤其是在数值计算中)。
矢量化是我们可以通过 NumPy 获得的东西。 Numpy 是一个具有高效数据结构的库,旨在保存矩阵数据。它主要是用 C 语言编写的,所以速度是您可以信赖的。
让我们尝试使用 Numpy 方法 .sum 和 .arange 代替 Python 函数。
这可以在 0.22 秒内完成工作。这比以前的方法快得多。
这就是为什么您应该尽可能在循环上使用向量操作的原因。
通过更多计算测试循环和 Numpy
到目前为止,我们已经看到了 Numpy 的一个简单应用,但是如果我们不仅有一个 for 循环,还有一个 if 条件和更多的计算要做呢?
这是 Numpy 明显优于循环的时候。
想象一下,我们有一个随机考试分数数组(从 1 到 100),我们想要获得未通过考试的人的平均分数(分数<70)。
下面是我们如何使用 for 循环来做到这一点。
import time
import numpy as np
random_scores = np.random.randint(1, 100, size=100000010)
# SOL1: solving problem using a for loop
start = time.time()
count_failed = 0
sum_failed = 0
for score in random_scores:
if score < 70:
sum_failed += score
count_failed += 1
print(sum_failed/count_failed)
print(f'For Loop: {time.time() - start} seconds')
这大约需要 15.7 秒。不错,但我们可以使用 Numpy 获得更快的结果。
这是我们如何使用 Numpy 执行此操作的方法。
上面的代码大约需要 0.78 秒。这样更快,代码也很简单!
用 Python 学习数据科学?加入我的电子邮件列表与 10k+ 人一起获取我的免费 Python for Data Science Cheat Sheet。[0]
如果您喜欢阅读此类故事并希望支持我作为作家,请考虑注册成为 Medium 会员。每月 5 美元,让您可以无限制地访问数以千计的 Python 指南和数据科学文章。如果您使用我的链接注册,我将赚取少量佣金,您无需支付额外费用。[0]
文章出处登录后可见!