2016-11-08 33 views
1

值如果我有像列表[1,2,3,4,1,2,3,4],我想总结等的值:萨姆只有前两个在numpy的

[6, 9, 8, 6, 7, 4] 

公式为value + value_one_ahead + value_two_ahead

+0

查看'np.cumsum'。 – hpaulj

+0

目标的最后一个元素是9,对吧? – hpaulj

+0

'np.add.reduceat'也可以使用,尽管设置索引参数需要一些努力。 – hpaulj

回答

2

的操作可以被解释为输入的(discrete) convolution与[1,1,1],因此可以使用numpy.convolve

In [178]: x = np.array([1, 2, 3, 4, 1, 2, 3, 4]) 

In [179]: np.convolve(x, np.ones(3, dtype=x.dtype), mode='valid') 
Out[179]: array([6, 9, 8, 7, 6, 9]) 

有关mode参数的说明,请参阅文档字符串。如果可用的mode选项不能按照您想要的方式处理输入的结尾,则可能必须调整返回值或添加一行或两行附加代码。例如,要得到的东西更接近你的问题,你可以使用mode='full'(这是默认的)写,然后丢弃前两个元素(通过采取切片[2:]):

In [181]: np.convolve(x, np.ones(3, dtype=x.dtype), mode='full')[2:] 
Out[181]: array([6, 9, 8, 7, 6, 9, 7, 4]) 

注:np使用import numpy as np定义。 np.ones(3, dtype=x.dtype)创建具有给定长度和数据类型的1的数组:

In [180]: np.ones(3, dtype=x.dtype) 
Out[180]: array([1, 1, 1]) 
2
l = [1, 2, 3, 4, 1, 2, 3, 4] 
result = [] 
for i in range(len(l)-2): 
    result.append(
     l[i] + l[i+1] + l[i+2] 
    ) 
print result 
+0

numpy没有内置任何内容? – Rob

2

这里的一个解决方案,这只是numpy的:

>>> arr[:-2] + arr[1:-1] + arr[2:] 
array([6, 9, 8, 7, 6, 9])