직장에서 우리는 종종 코드 속도 향상 최적화 문제에 직면합니다. 이 기사에서는 몇 가지 Python
일반적인 속도 향상 기술을 소개합니다.
최적화 원칙:
1. 먼저 코드가 올바르게 실행될 수 있는지 확인한 다음 성능 최적화를 수행합니다.
2. 최적화 선택은 일반적으로 시간을 위해 공간을 희생하는 것이므로 비용을 측정해야 합니다.
3. 시간 최적화에 중점을 둡니다. 코드의 일부를 소비하고 전반적인 최적화는 일반적으로 코드 가독성을 감소시킵니다.
0 시간 소모적인 데코레이터 정의
# 可监控程序运行时间
import time
def clock(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print("共耗时: %s秒" % round(end_time - start_time, 2))
return result
return wrapper
1 전역 변수 사용을 피하십시오
start_time = time.time()
size = 10000
for x in range(size):
for y in range(size):
z = x * y
end_time = time.time()
print('共耗时:%s秒' % round(end_time - start_time, 2))
# 共耗时:11.78秒,不推荐
# 使用局部变量
@clock
def multiplication():
size = 10000
for x in range(size):
for y in range(size):
z = x * y
multiplication()
# 共耗时: 5.5秒,提速50%
2 메서드(함수)의 속성에 액세스하지 말고 from X import X를 사용해 보십시오.
import math
@clock
def computeSqrt():
result = []
for i in range(10000000):
# math方法访问sqrt属性
result.append(math.sqrt(i))
computeSqrt()
# 不推荐,共耗时: 2.09秒
# 使用from X import X,直接访问sqrt
from math import sqrt
@clock
def computeSqrt():
result = []
for i in range(10000000):
result.append(sqrt(i))
computeSqrt()
# 推荐,共耗时: 1.75秒
[1]에서 지역 변수 조회가 전역 변수보다 빠르다고 언급했으므로 자주 액세스하는 변수를 append
지역 변수로 변경하면 작업 속도를 높일 수 있습니다.
from math import sqrt
@clock
def computeSqrt():
result = []
# 赋值给局部变量
append = result.append
for i in range(10000000):
append(sqrt(i))
computeSqrt()
# 推荐,共耗时: 1.45秒
3 순회 최적화
# 使用while进行遍历
@clock
def circulate():
i = 0
li = []
append = li.append
while i < 10000000:
append(i*2)
i += 1
return li
circulate()
# 不推荐,共耗时:1.48秒
@clock
def circulate():
li = []
append = li.append
# 使用for代替while
for i in range(10000000):
append(i*2)
return li
circulate()
# for优于while,共耗时:1.09秒
@clock
def circulate():
# 使用列表推导式
return [i*2 for i in range(10000000)]
circulate()
# 推荐列表推导式,共耗时:0.88秒。但不适用于复杂计算。
4 내부 for 루프의 계산을 줄입니다.
from math import sqrt
@clock
def inner():
size = 10000
for x in range(size):
for y in range(size):
# 相当于在重复计算sqrt(x)
z = sqrt(x) + sqrt(y)
inner()
# 不推荐,共耗时:19.00秒
from math import sqrt
@clock
def inner():
size = 10000
for x in range(size):
# 只计算一次sqrt(x),然后将它存了起来
sqrt_x = sqrt(x)
for y in range(size):
z = sqrt_x + sqrt(y)
inner()
# 推荐,共耗时:10.22秒
5 Numpy
데이터 유형을 사용한 연산
Numpy
맨 아래 레이어는 에서 C语言
구현되고 이 스크립팅 언어는 이 컴파일된 언어 Python
에 비해 C/C++
효율성과 성능 면에서 자연히 불리하기 때문에 Numpy
계산을 수행하기 전에 데이터에 대해 유형 변환을 수행하는 패키지를 도입할 수 있습니다.
import numpy as np
li = [i for i in range(10000000)]
@clock
def npSpeed():
# 使用Python方法
sum(li)
npSpeed()
# 共耗时0.79秒
import numpy as np
li = np.array([i for i in range(100000000)])
@clock
def npSpeed():
# 使用Numpy方法
np.sum(li)
npSpeed()
# 共耗时0.11秒,速度约是Python的8倍
Numpy
데이터 양이 많을수록 이점이 더 분명해집니다. 따라서 기계 학습 및 딥 러닝 프로젝트 작업에서 Numpy
매우 자주 사용됩니다 .
공식 계정에서 AI 딥 러닝과 관련된 건조 제품 더 보기: AI에는 온도가 있습니다.