Skip to main content
 首页 » 编程设计

python之仅对 numpy 中的前两个值求和

2025年05月04日14duanxz

如果我有一个像 [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])