需要为数据帧的每一行计算表达式的值(如代码中所示)。 当前代码有效,但计算时间太长。 需要一种更快的方法来实现它。
代码:
num =0
den = 0
for i in range(1,2000):
p1 = p[i]
t1 = tx[i]
num = num * pow(numpy.e,-1*t1) + p1
den = den * pow(numpy.e,-1*t1) + 1
t["s"][i] = num/den
数据框中的所有值都是float数据类型 对于2000行,上面的代码大约需要80秒。 实际数据框有超过一百万行
请建议。 谢谢!
答案 0 :(得分:0)
如果t
是您需要评估的唯一变量,那么您不需要pow(numpy.e, -t1)
num = 0
den = 0
for i in range(1,2000):
p1 = p[i]
#t1 = tx[i]
num += p1
den += 1
t["s"][i] = num / den
这就足够了。
编辑:
def mytest(a, b):
t = []
num, den = 0, 0
for i in range(1, 2000):
num = num * pow(np.e, -b[i]) + a[i]
den = den * pow(np.e, -b[i]) + 1
t.append(num / den)
return t
def mytest2(a, b):
t = []
num, den = 0, 0
neck = pow(np.e, -b) # bottle neck
for i in range(1, 2000):
num = num * neck[i] + a[i]
den = den * neck[i] + 1
t.append(num / den)
return t
输出:
%timeit mytest(random.rand(2000), random.rand(2000))
100 loops, best of 3: 3.26 ms per loop
%timeit mytest2(random.rand(2000), random.rand(2000))
100 loops, best of 3: 1.54 ms per loop
不幸的是,我无法重现你的(巨大的)80秒。你应该在其他地方修理。