【发布时间】:2020-06-12 06:43:48
【问题描述】:
我有一段代码多次遍历一个向量,执行一些计算,并将结果平均到现有数据中。此计算基于其他变量(例如时间)以及输入,因此相同的输入具有不同的输出,并且无法预先计算总结果。这看起来像这样:
output = np.zeros(50)
while loop_count < max_loops:
for idx, dat in enumerate(vec):
val = calculate(dat)
averaged = (val + output[idx] * loop_count) / (1 + loop_count)
output[idx] = averaged
loop_count += 1
这工作正常,但似乎很慢(大约需要 9 秒)。有没有更好的解决方案,最好使用 numpy、scipy 或 pandas? vec 的长度可能很长,因此避免复制也是理想的
【问题讨论】:
-
如果这需要大约 9 秒,那么我假设大约 95% 的时间花在
calculate上,因为即使对于更长的向量,循环和平均也不会那么昂贵。所以我想除了尝试优化计算本身之外,这里没有什么可做的。