【发布时间】:2018-01-08 16:50:20
【问题描述】:
我正在尝试矢量化,这个等式使其更快(即不使用循环)这是 sslow 与 sfast 相对的想法。
mu2 = [1.0, 0.11264281499520618, 0.012799179048180226]
alpha = np.array([ 52.64173932, -1016.96156872, 4514.08903276])
def sslow(alpha):
t0 = time()
u = lambda x: np.exp(-(1+np.poly1d(list(reversed(alpha)))(x)))
k = sp.integrate.quad(lambda x: u(x), 1e-16, 1)[0]+np.dot(mu2,alpha),(time()-t0)
return k
def sfast(alpha):
t0 = time()
def int1(b):
j = 1
for q in range(0,len(alpha)):
j = j + alpha[q]*(b**q)
return np.exp(-j)
ans, err = sp.integrate.quad(int1, 1e-16, 1)
u = ans+np.dot(mu2,alpha);
return u,(time()-t0)
t = []
r = int(1e3)
for d in range(0,r):
t = (np.append(t,sslow(alpha)[1]))
print sum(t)/r
t = []
for d in range(0,r):
t = (np.append(t,sfast(alpha)[1]))
print sum(t)/r
我完全错过了什么吗?有没有更好的方法来对向量和多项式基进行点积然后积分?
【问题讨论】:
-
要真正获得有意义的速度测试,您不能只运行一次。尝试做 1000 次,然后除以时间。可能你看到的是调用 scipy 函数的开销,而且对于非常小的问题,你的循环函数确实更快。
-
@Joe 我已经完全做到了,并且 5 的因素仍然存在。
-
您能否将您的代码编辑为最低限度的工作示例,例如添加您使用的变量
mu2、alpha等并添加导入。您还可以添加时间,这样人们就可以轻松地复制粘贴并在他们的机器上运行它。 -
@Joe 完成。你能想出一个更好的方法来创建多项式和浮点数的点积然后积分吗?
-
会看看。您的示例缺少导入。这个答案对你有帮助吗? stackoverflow.com/a/24066766/7919597
标签: python computer-science polynomials