[Python] 提高Python运行速度(小技巧)

3.3 提高Python运行速度(小技巧)

3.3.1 通过公式计算

如果在计算时,能使用公式计算出最后的结果,那对于运行效率上来说就是降维打击了。在一些特殊场景中,我们不必傻乎乎的利用循环进行计算,尝试使用公式计算对于速度的提升将是飞越性的。
速度对比_公式计算

from mdTools import ftDecTimeIt
import numpy as np

array = np.random.random(1_0000_0000)
@ftDecTimeIt(1)
def slow():
    s = 0
    for _ in range(1, 1_0000_0001):
        s += _

@ftDecTimeIt(1)
def fast():
s = (1 + 1_0000_0000) * 1_0000_0000 / 2

slow()
fast()

函数 slow 运行 1 次的总耗时为:5.0604 秒
函数 fast 运行 1 次的总耗时为:0.0000 秒

3.3.2 在函数中导入模块

虽然导入模块有时候是必不可少的,但是其实导入模块也是需要花费时间的,当我们在制作模块而需要被其它模块导入时,由于被导入模块通常最上方导入了该模块其它函数或类的依赖模块,于是在被其它模块导入时,某些不必要的模块也会被导入。
为了避免这种情况,其实我们可以在函数内部导入模块,而非在模块最上方导入。

3.3.3 使用列表推导式

Python中的列表推导式为我们提供了更简短的语法,甚至只需要一行代码就可以实现各种复杂的可迭代对象。我们可以使用列表推导式生成我们想要的列表、元组,甚至字典等。
通过列表推导式不仅可以提高代码编写效率,也能提高运行效率。
速度对比_列表推导式

from mdTools import ftDecTimeIt

@ftDecTimeIt(10000)
def slow():
    a = []
    for _ in range(10000):
        if _ % 2 == 0:
            a.append(_)

@ftDecTimeIt(10000)
def fast():
a = [x for x in range(10000) if x % 2 == 0]

slow()
fast()

函数 slow 运行 10000 次的总耗时为:7.2413 秒
函数 fast 运行 10000 次的总耗时为:5.5238 秒

3.3.4 使用 f-Strings连接字符串

我们已经知道将字符串进行串联可能会使程序变慢。尤其是使用’+’进行拼接。并且,‘+’只能拼接字符串类型的数据,遇到其它类型时必须转换成str才能正常拼接。
一个比较好的解决方案是使用f-Strings,通过f-strings拼接可以自动将其他类型转换成字符串类型,并且速度要比‘+’拼接快。
速度对比_f-strgings

from mdTools import ftDecTimeIt

@ftDecTimeIt(100_0000)
def slow():
    a = {'name': 'zhangsan', 'gender': 'man', 'age': 18}
    s = '我的名字是:' + a['name'] + ' 性别是:' + a['gender'] + ' 年龄是:' + str(a['age'])
return s

@ftDecTimeIt(100_0000)
def fast():
    a = {'name': 'zhangsan', 'gender': 'man', 'age': 18}
    s = f"我的名字是:{a['name']} 性别是:{a['gender']} 年龄是:{a['age']}"
return s

print(slow())
print(fast())

函数 slow 运行 1000000 次的总耗时为:0.7570 秒
我的名字是:zhangsan 性别是:man 年龄是:18
函数 fast 运行 1000000 次的总耗时为:0.5284 秒
我的名字是:zhangsan 性别是:man 年龄是:18

3.3.5 从集合中检查

如果要在一个非常大的列表中判断某个元素是否存在,那么可以先将其转换成集合,然后再在该集合中判断是否存在目标元素。这样将会提高运行效率。
速度对比_检查元素

from mdTools import ftDecTimeIt
import numpy as np

lst = np.random.random(10000)
st = set(lst)

@ftDecTimeIt(100000)
def slow():
    if 0 in lst:
        pass

@ftDecTimeIt(100000)
def fast():
    if 0 in st:
        pass

slow()
fast()

函数 slow 运行 100000 次的总耗时为:0.7620 秒
函数 fast 运行 100000 次的总耗时为:0.0110 秒

3.3.6 使用局部变量

全局变量会一直保存在内存之中,而局部变量在函数调用完毕后马上销毁。
速度对比_使用局部变量

from mdTools import ftDecTimeIt

a = 'a'

@ftDecTimeIt(1)
def slow():
    lst = []
    for _ in range(10000000):
        lst.append(a)

@ftDecTimeIt(1)
def fast():
    b = 'b'
    lst = []
    for _ in range(10000000):
        lst.append(b)

slow()
fast()

函数 slow 运行 1 次的总耗时为:0.9645 秒
函数 fast 运行 1 次的总耗时为:0.8803 秒

3.3.7 减少通过‘.’访问属性

速度对比_访问属性

from mdTools import ftDecTimeIt

@ftDecTimeIt(100_0000)
def slow():
    lowerlist = ['i', 'am', 'a', 'bad', 'boy', 'am', 'a', 'bad', 'boy', 'am', 'a', 'bad', 'boy']
    upperlist = []
    for word in lowerlist:
        upperlist.append(word.upper())

@ftDecTimeIt(100_0000)
def fast():
    lowerlist = ['i', 'am', 'a', 'bad', 'boy', 'am', 'a', 'bad', 'boy', 'am', 'a', 'bad', 'boy']
    up = str.upper
    upperlist = []
    ap = upperlist.append
    for word in lowerlist:
        ap(up(word))

slow()
fast()

函数 slow 运行 1000000 次的总耗时为:1.5311 秒
函数 fast 运行 1000000 次的总耗时为:1.3696 秒

3.3.8 创建列表和字典

使用[]和{}来创建列表和字典相比使用list()和dict{}运行更加高效,因为使用list()和dict{}来创建对象时需要调用一个附加函数。
速度对比_创建list

from mdTools import ftDecTimeIt

@ftDecTimeIt(1000_0000)
def slow():
lst = list('123')

@ftDecTimeIt(1000_0000)
def fast():
lst = [1, 2, 3]

slow()
fast()

函数 slow 运行 10000000 次的总耗时为:2.7894 秒
函数 fast 运行 10000000 次的总耗时为:1.3917 秒

速度对比_创建dict

from mdTools import ftDecTimeIt

@ftDecTimeIt(1000_0000)
def slow():
dct = dict(['12', '34'])

@ftDecTimeIt(1000_0000)
def fast():
dct = {'1': '2', '3': '4'}

slow()
fast()

函数 slow 运行 10000000 次的总耗时为:6.1273 秒
函数 fast 运行 10000000 次的总耗时为:1.7276 秒

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python在处理大规模数据时,通常会比较慢。因此,为了提高性能,许多人会使用GPU进行加速计算。在Python中,可以使用许多库来实现GPU加速计算,例如Numba、PyCUDA和PyOpenCL等。 Numba是一个用于将Python代码编译成机器代码的库,它可以显著提高代码的运行速度。Numba支持使用CUDA和ROCm框架进行GPU加速计算。 下面是一个使用Numba进行GPU加速计算的例子: ```python import numpy as np from numba import jit, cuda # 声明函数为CUDA函数 @cuda.jit def add(a, b, c): # 获取线程索引 idx = cuda.threadIdx.x # 获取块索引 idy = cuda.blockIdx.x # 获取块大小 block_size = cuda.blockDim.x # 计算全局索引 index = idx + idy * block_size # 执行加法操作 c[index] = a[index] + b[index] # 定义数组的大小 N = 1024**2 # 定义输入数组 a = np.ones(N) b = np.ones(N) # 定义输出数组 c = np.zeros(N) # 定义块大小和线程大小 threads_per_block = 1024 blocks_per_grid = (N + (threads_per_block - 1)) // threads_per_block # 进行加法操作 add[blocks_per_grid, threads_per_block](a, b, c) # 输出结果 print(c) ``` 这个例子使用Numba将一个加法函数编译成CUDA函数,并在GPU上进行运算。可以看到,使用GPU加速计算的结果比使用CPU的结果要快得多。 在实际应用中,使用GPU加速计算的速度提升取决于数据的大小和计算的复杂度。对于一些简单的计算,使用GPU加速可能没有太大的优势。但是,对于一些大规模的、复杂的计算,使用GPU加速可以显著提高运算速度。 对于可视化方面,Python中有很多可视化库可以使用,例如Matplotlib、Seaborn和Plotly等。这些库通常不会直接使用GPU加速,但是可以使用一些技巧提高可视化的速度。例如,可以使用多线程或多进程来加速计算,或者使用分布式计算来加速处理大规模数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0思必得0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值