2014-02-13 46 views
1

我想通過numpy測量時間,但我不確定是否有正確的參數。numpy measure time - 語法錯誤

import numpy as np 
import timeit 

def svdsolve(a,b): 
    u,s,v = np.linalg.svd(a) 
    c = np.dot(u.T,b) 
    w = np.linalg.solve(np.diag(s),c) 
    x = np.dot(v.T,w) 
    return x 


A_=np.fromfile('dataA.bin',count=-1,dtype=np.float32) 
B_=np.fromfile('dataB.bin',count=-1,dtype=np.float32) 


s='svdsolve({0},{1})'.format(A,B) 

mytime= timeit.Timer(stmt=s,setup='import numpy').timeit(100) 

print mytime 

現在,它給了我:

File "/usr/lib64/python2.7/timeit.py", line 136, in init code = compile(src, dummy_src_name, "exec") File "", line 6 svdsolve([[ 1.86248358e+09 1.54404045e+09] ^SyntaxError: invalid syntax

而且,我沒有」知道(也沒有我發現了一個參考)上的計時器傳遞什麼參數。 而我不知道如何使用重複timeit(100)

+0

不知道這是問題,但你應該做'設置='進口numpy的作爲np'',因爲你是指它作爲'NP '在你正在計時的方法中。另外,試試'.format(repr(A),repr(B))'。 –

+0

@tobias_k:你好,使用導入作爲np沒有任何作用(如你所說,我必須使用它),並使用repr結果:NameError:全局名'svdsolve'沒有定義 – George

+0

嘗試'從numpy導入*'在頂部(爲了使'array'名字需要重建imputs)和'from __main__ import *'爲'setup'。 –

回答

3

既不是NumPy的陣列的strrepr也不保證以產生可以被用來重建原始的陣列的輸出。 (format使用str,但repr不會幫助。)相反,import數組放入定時代碼的名稱空間。假設這代碼正在運行的腳本,這將是

mytime = timeit.Timer(stmt='svdsolve(A, B)', 
         setup='from __main__ import A, B, svdsolve' 
        ).timeit(100) 
+0

我想你也必須導入'svdsolve'。 +1。 –

+0

@tobias_k:哎呀,錯過了那一個。固定。 – user2357112

+0

@ user2357112:好的,這是有效的!你能告訴我,時間以秒爲單位嗎?而時間(100),100次重複,這意味着什麼?我應該總是使用100嗎?Thnaks! – George