Python numpy度量时间-语法错误
我想用numpy来衡量时间,但我不确定我的论点是否正确Python numpy度量时间-语法错误,python,numpy,time,Python,Numpy,Time,我想用numpy来衡量时间,但我不确定我的论点是否正确 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=n
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
现在它给了我:
文件“/usr/lib64/python2.7/timeit.py”,第136行,在init
代码=编译(src,伪src\u名称,“exec”)文件“”,第6行
svdsolve([[1.86248358e+09 1.54404045e+09]
^SyntaxError:无效语法
此外,我不明白(也没有找到引用)在计时器上传递什么参数。
我不知道如何使用重复
timeit(100)
一个NumPy数组的str
和repr
都不能保证生成可以用于重建原始数组的输出。(format
使用str
,但repr
没有帮助。)相反,import
将数组导入定时代码的命名空间中
mytime = timeit.Timer(stmt='svdsolve(A, B)',
setup='from __main__ import A, B, svdsolve'
).timeit(100)
不确定这是否是问题所在,但您应该执行
setup='import numpy as np'
,因为您在计时的方法中将其称为np
。此外,请尝试.format(repr(A),repr(B))
@tobias_k:您好,使用import as np没有任何效果(尽管如您所述,我必须使用它)使用repr会导致:NameError:全局名称“svdsolve”未在顶部的numpy import*中定义try(以获得重建输入所需的数组
名称)和from\uuuuu main\uuuuu import*
forsetup
@tobias\u k:它给出了语法警告:import*只允许在模块级进行奇怪的,这对我有效。无论如何,下面的答案要好得多。@tobias\u k:Whoops,错过了那个。修复。@user2357112:好的,这个有效!你能告诉我,时间是以秒为单位测量的吗?时间是(100),100次重复,这是什么意思?我应该始终使用100次吗?Thnaks!刚刚注意到您使用导入numpy
而不是导入numpy作为np
,但它仍然有效。结果证明您根本不需要导入numpy
,因为svdsolve
已经“知道”np
@George:时间以秒为单位。timeit(100)
表示您正在运行svdsolve(A,B)
100次并占用总时间。没有一个好的一刀切的默认值;它是在运行足够多的时间以平衡运行时间与运行时间之间的差异与不占用永远时间之间的平衡。计时代码运行时间越长,重复次数应越少。