我有一個腳本,我計算:優化一個簡單的數學計算在列表
def sumsquared(arr):
sum = 0
idx = 0
len = arr.__len__()
while idx < (len - 1):
sum = sum + (arr[idx] * arr[idx]) + (arr[idx+1] * arr[idx+1])
idx = idx + 2
return sum
上述函數被調用一個循環填充兩個列表和兩次調用這個函數:第一次用列表len〜1024項,第二次使用len〜44100項。根據輸入,循環本身可以運行100到100000次。
對於小尺寸輸入,cProfile
基於分析告訴我:
ncalls tottime percall cumtime percall filename:lineno(function)
---------------------------------------------------------------------
2560 12.065 0.005 12.065 0.005 beat.py:8(sumsquared)
這是總運行時間爲腳本約95%。有什麼方法可以加快這個功能嗎?
你應該能夠使用LEN = LEN(ARR),無需調用.__ LEN __() – monkut
@monkut,將無法工作,因爲'len'是函數中的一個局部變量,它會阻止訪問內建的'len()'。 WeaklyTyped應該能夠執行'length = len(arr)' – Duncan
是的,或者只是使用len(arr)本身,而不是創建一個變量。 – monkut