【发布时间】:2015-03-30 18:50:53
【问题描述】:
所以我写下了使用三种不同方法评估多项式的代码。霍纳的方法应该是最快的,而天真的方法应该是最慢的,对吧?但是为什么计算它的时间不是我所期望的呢?对于迭代和朴素方法,计算时间有时会完全相同。它有什么问题?
import numpy.random as npr
import time
def Horner(c,x):
p=0
for i in c[-1::-1]:
p = p*x+i
return p
def naive(c,x):
n = len(c)
p = 0
for i in range(len(c)):
p += c[i]*x**i
return p
def itera(c,x):
p = 0
xi = 1
for i in range(len(c)):
p += c[i]*xi
xi *= x
return p
c=npr.uniform(size=(500,1))
x=-1.34
start_time=time.time()
print Horner(c,x)
print time.time()-start_time
start_time=time.time()
print itera(c,x)
print time.time()-start_time
start_time=time.time()
print naive(c,x)
print time.time()-start_time
以下是一些结果:
[ 2.58646959e+69]
0.00699996948242
[ 2.58646959e+69]
0.00600004196167
[ 2.58646959e+69]
0.00600004196167
[ -3.30717922e+69]
0.00899982452393
[ -3.30717922e+69]
0.00600004196167
[ -3.30717922e+69]
0.00600004196167
[ -2.83469309e+69]
0.00999999046326
[ -2.83469309e+69]
0.00999999046326
[ -2.83469309e+69]
0.0120000839233
【问题讨论】:
-
感谢您的所有回答。除了 timeit 函数的实现,我想知道我可以做些什么来改进这三种算法中的每一种,以使它们更高效/更快?
-
是的,有 :) 为了更清楚地说明这一点,您还可以编辑原始问题。
标签: python function loops iteration polynomial-math