1.python性能优化

1.去掉不必要的显式for,改为向量化计算(numpy)

  1. numpy为什么比for快?
    1. 涨知识
    2. 对于科学计算有什么可以提高运算?
import timeit
import numpy as np

#1. 去掉不必要的显示for循环 ,使用向量化计算
def for_sum(n):
    '''生成一个数组,10000,每一项元素加1'''
    list_data=np.arange(0,n,1)
    for i in range(len(list_data)):
        list_data[i]+=1
    return list_data
# timeit1=timeit.Timer(stmt='sum()',setup='from __main__ import sum')
# print(timeit1.timeit(number=1))
print('for_sum:',timeit.timeit(stmt='for_sum(10000)',setup='from __main__ import for_sum',number=1000))
def np_sum(n):
    list_data=np.arange(0,n,1)
    list_data+=1
    return list_data
# print(timeit.repeat(stmt='np_sum()',setup='from __main__ import np_sum',repeat=1,number=1))
print('np_sum',timeit.timeit(stmt='np_sum(10000)',setup='from __main__ import np_sum',number=1000))

'''
for_sum: 3.8908879
np_sum 0.010136000000000145
'''

2.使用numba加速

#2.使用numba加速 
# 数据量大时比原始for循环快,但数据量小时比for慢
import numba as nb
#引用numba装饰器
@nb.jit()
def nb_sum(n):
    list_data = np.arange(0, n, 1)
    for i in range(len(list_data)):
        list_data[i] += 1
    return list_data
#输出执行代码的时间
print('nb_sum:',timeit.timeit(stmt='nb_sum(10000)',setup='from __main__ import nb_sum',number=1000))
# nb_sum 0.41194099999999967

3.使用多进程(开核)

  1. 并发:单核cpu交替执行多任务,竞争资源,有处理多任务的能力
  2. 并行:多核cpu同时执行多任务,各尽其责,互不干扰,有同时处理多任务的能力
  3. 同步是阻塞模式,请求资源未响应时,会一直等待(由调用方主动询问)
  4. 异步是非阻塞模式,请求资源未响应时,去执行其他操作,系统通知后再返回接着执行(由被调用方通知)

4.使用sklearn.extenals.joblib扩展库

5.使用bottleneck库(基于Cpython实现,高性能)



  • 如果一个蠢方法有效,那它就不是蠢方法
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值