如果我有一个像 [1, 2, 3, 4, 1, 2, 3, 4] 这样的列表,我想对这些值求和,例如:
[6, 9, 8, 6, 7, 4]
公式为 value + value_one_ahead + value_two_ahead。
请您参考如下方法:
操作可以解释为 (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])
