【发布时间】:2020-12-25 04:00:00
【问题描述】:
我正在研究运行时非常重要并且我们正在使用的数据很大的东西,但基本上问题归结为优化求解系列 x,其中 x1 已知且 x = ax+b 来自先前排。比如开始状态:
a b x
1 2 3
3 1
2 2
4 8
1 9
最终状态如下所示:
a b x
1 2 3
3 1 5
2 2 16
4 8 72
1 9 81
因为 3*1+2 = 5、5*3+1 = 16 等等。
我试着计算它的数学,结果是:
b0 = x1
xi = sum(n=0 to i-1)(bn*product(m=n+1 to i-1)(am)
例如,对于您最终会得到的第三行:
x3 = a1*a2*b0 + b1*a2 + b2 = 3*1*3 + 2*3 + 1 = 9 + 6 + 1 = 16
但从计算上看,这似乎比通过循环遍历行来计算每个 x 更糟糕,如下所示:
for i in range(2,len(df)):
df.x[i] = df.x[i-1]*df.a[i-1]+df.b[i-1]
有没有更简单的方法来解决我遗漏的问题,或者我只是在处理一个计算量很大的操作,而我必须承担迭代的成本?如果 a 项不存在,则可以通过 cumsum 处理 bn 部分,例如:
df['b_cumsum'] = x1+cumsum(df.b)
但在尝试包含 a 项时,我最终碰壁了,尤其是因为即使在每个总和项中,我们最终也需要这么多不同的产品集。
谢谢。
【问题讨论】:
-
我认为它不能向量化,因为它是滚动计算。所以,你可能要求我们打败循环代码
标签: python pandas numpy optimization vectorization