在numpy中只汇总前两个值

时间:2016-11-08 01:27:38

标签: python numpy

如果我有一个像[1,2,3,4,1,2,3,4]这样的列表,我想总结如下的值:

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

其中公式为value + value_one_ahead + value_two_ahead

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

这里的解决方案只有numpy:

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

答案 2 :(得分:2)

可以使用[1,1,1]将操作解释为输入的(discrete) convolution,因此您可以使用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参数的说明,请参阅docstring。如果可用的mode选项不按您希望的方式处理输入的结尾,则可能必须调整返回值或添加一行或两行其他代码。例如,为了更接近你在问题中写的内容,可以使用mode='full'(这是默认值),然后丢弃前两个元素(通过获取切片[2:]):< / p>

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])