循环中的累积加法

时间:2018-06-05 07:41:17

标签: python pandas loops numpy

我正在尝试将值添加到上一个值,每次都将值存储在数组中。

此代码只是大型项目的一部分。为简单起见,我将按如下方式定义变量:

ele_ini = [12]
smb = [2, 5, 7, 8, 9, 10]

val = ele_ini
for i in range(len(smb)):
     val += smb[i]
     print(val)
     elevation_smb.append(val)

问题

每次,elevation_smb中存储的先前值都会被当前值替换,以便我获得的结果为:

elevation_smb = [22, 22, 22, 22, 22, 22]

然而,我期待的结果是

elevation_smb = [14, 19, 26, 34, 43, 53]

注意ele_ini是一个包含n个元素的向量。我只是为了简单而使用了1个元素。

3 个答案:

答案 0 :(得分:4)

唐使用循环,因为速度慢。更好的是下面的快速矢量化解决方案。

我认为需要numpy.cumsum并为ele_ini添加向量2d numpy array

ele_ini = [12, 10, 1, 0]
smb = [2, 5, 7, 8, 9, 10]

elevation_smb  = np.cumsum(np.array(smb)) + np.array(ele_ini)[:, None]
print (elevation_smb)
[[14 19 26 34 43 53]
 [12 17 24 32 41 51]
 [ 3  8 15 23 32 42]
 [ 2  7 14 22 31 41]]

答案 1 :(得分:2)

使用reduce

In [6]: reduce(lambda c, x: c + [c[-1] + x], smb, ele_ini)
Out[6]: [12, 14, 19, 26, 34, 43, 53]

答案 2 :(得分:2)

在您的情况下,似乎矢量使用指针。这就是它没有创造新价值的原因。尝试添加复制值的copy()

elevation_smb.append(val.copy())