将数组中的第一个元素添加到同一个数组中的下一个元素的最佳方法是什么,然后将结果添加到数组的下一个元素,依此类推?例如,我有一个数组:
s=[50, 1.2658, 1.2345, 1.2405, 1.2282, 1.2158, 100]
我希望结束数组如下所示:
new_s=[50, 51.2658, 52.5003, 53.7408, 54.969, 56.1848, 100]
因此保持数组的最小和最大元素不变。
我开始走这条路了:
arr_length=len(s)
new_s=[50]
for i, item in enumerate(s):
if i == 0:
new_s.append(new_s[i]+s[i+1])
elif 0<i<=(arr_length-2):
new_s.append(new_s[i]+s[i+1])
目前我得到以下列表:
new_s=[50, 51.2658, 52.5003, 53.7408, 54.969, 56.1848, 156.1848]
我做错了什么,不留下最后一项不变?
答案 0 :(得分:1)
对于除最后一项之外的所有项目,我们使用numpy.cumsum()
,然后将最后一项添加到cumsum()
的结果中:
>>> import numpy as np
>>> s=[50, 1.2658, 1.2345, 1.2405, 1.2282, 1.2158, 100]
>>>
>>> np.append(np.cumsum(s[:-1]), s[-1])
array([ 50. , 51.2658, 52.5003, 53.7408, 54.969 , 56.1848,
100. ])
或者使用python(3.X)使用itertools.accumulate()
:
>>> import itertools as it
>>>
>>> list(it.accumulate(s[:-1])) + s[-1:]
[50, 51.2658, 52.500299999999996, 53.74079999999999, 54.968999999999994, 56.184799999999996, 100]
答案 1 :(得分:1)
您可以使用numpy.cumsum()
:
import numpy as np
np.append(np.cumsum(s[:-1]), s[-1])
# array([50., 51.2658, 52.5003, 53.7408, 54.969 , 56.1848, 100.])