登錄改變我想做這個傢伙做了什麼:有效地檢測出蟒蛇
但是我需要優化它運行超級快。簡而言之,我想要抽取一個時間序列,並告訴它每次穿過零(改變符號)。我想記錄零交叉點之間的時間。由於這是真實的數據(32位浮點數),我懷疑每個數字都是零,所以這並不重要。我目前有一個計時程序,所以我會計時結果看看誰贏了。
我的解決辦法給出(微秒):
open data 8384
sign data 8123
zcd data 415466
正如你可以看到過零檢測器是慢的部分。這是我的代碼。
import numpy, datetime
class timer():
def __init__(self):
self.t0 = datetime.datetime.now()
self.t = datetime.datetime.now()
def __call__(self,text='unknown'):
print text,'\t',(datetime.datetime.now()-self.t).microseconds
self.t=datetime.datetime.now()
def zcd(data,t):
sign_array=numpy.sign(data)
t('sign data')
out=[]
current = sign_array[0]
count=0
for i in sign_array[1:]:
if i!=current:
out.append(count)
current=i
count=0
else: count+=1
t('zcd data')
return out
def main():
t = timer()
data = numpy.fromfile('deci.dat',dtype=numpy.float32)
t('open data')
zcd(data,t)
if __name__=='__main__':
main()
有一個'timeit'模塊,你知道嗎? :) – 2010-10-01 21:04:15
有趣......我更喜歡我的,因爲它可以放在整個功能。你可以放下一個t()每行幾行,並快速找到瓶頸。如果我只想要我的功能,我會使用Linux'$ time python zcd.py' – chriscauley 2010-10-01 21:10:44
我猜'行'時間('符號數據')'是爲了'噸('符號數據')' 。是嗎? – 2010-10-01 21:23:51