我撰寫了這段代碼,并嘗試更多地學習如何更有效地撰寫代碼并提高性能。
import random
def CalcAverageSolarFlareEvent(EventList):
return sum(EventList) / len(EventList)
percentage_solar_flare = 12
decade_counting = 0
Event = []
CurrentYear = 2022
for Simulations in range(1, 999999):
while True:
if random.randint(1, 100) != percentage_solar_flare:
decade_counting = 1
else:
Event.append(decade_counting)
decade_counting = 0
break
print("In the Year " str(int(CalcAverageSolarFlareEvent(Event))*10 CurrentYear)
" we got a Solarflare")
我試圖在decade_counting最后計算并添加當前年份,以提供更多記憶體。
uj5u.com熱心網友回復:
Python 不適合這樣的代碼,尤其是標準的 CPython 實作。考慮使用 PyPy 或 Pyston 或像 Numba 這樣的嵌入式 JIT(即時編譯器),或者編譯語言。
此外,您無需將專案添加到串列中即可對它們進行計數或求和:您可以即時計算部分總和。
這是使用 Numba JIT 修改的代碼:
import random
import numba as nb
@nb.njit('()')
def compute():
percentage_solar_flare = 12
decade_counting = 0
sum_Events = 0
count_Event = 0
CurrentYear = 2022
for Simulations in range(1, 999_999):
while True:
if random.randint(1, 100) != percentage_solar_flare:
decade_counting = 1
else:
sum_Events = decade_counting
count_Event = 1
decade_counting = 0
break
print("In the Year " str(int(sum_Events/count_Event)*10 CurrentYear)
" we got a Solarflare")
compute()
我的機器上的初始代碼需要 65 秒,而這個需要 4 秒。因此,它快了大約16 倍。大部分時間都花在生成隨機值上。SIMD 指令和多執行緒可以幫助進一步提高性能(提高 1~2 個數量級),但如果您是初學者,使用它們肯定不是一個好主意。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/497577.html
