我正在尝试将值添加到上一个值,每次都将值存储在数组中。
此代码只是大型项目的一部分。为简单起见,我将按如下方式定义变量:
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个元素。
答案 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())