gpt4 book ai didi

python - 列表中每个连续段的平均值

转载 作者:行者123 更新时间:2023-11-28 19:52:25 26 4
gpt4 key购买 nike

我有一个列表:

sample_list = array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])

我想计算每个元素的平均值,比如 4 个元素。但不是单独的 4 个元素,而是前 4 个:

1,2,3,4

其次是:

2,3,4,5

其次是:

3,4,5,6

等等。

结果将是第一个列表中每 4 个元素之间的平均值的数组或列表。

输出:

array([2.5, 3.5, 4.5, ...])

我的尝试:

sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
splits = 4

def avgerage_splits(data):
datasum = 0
count = 0
for num in data:
datasum += num
count += 1
if count == splits:
yield datasum / splits
datasum = count = 0
if count:
yield datasum / count

print(list(average_splits(sample_list)))

[1.5, 3.5, 5.5, 7.5, 9.5, 11.0]

这不是我需要的输出,因为它在移动到一组新的 4 个元素之前计算每 4 个元素的平均值。我只想在列表中向上移动一个元素并计算这 4 个元素的平均值,依此类推。

最佳答案

如果 numpy 是一个选项,一个简单的实现方法是使用 np.convolve ,当与 np.ones 的数组卷积时,可用于计算滚动平均值 :

import numpy as np
sample_list = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16], dtype=float)

w = 4
np.convolve(sample_list, np.ones(w), 'valid') / w

输出

array([ 2.5,  3.5,  4.5,  5.5,  6.5,  7.5,  8.5,  9.5, 10.5, 11.5, 12.5,
13.5, 14.5])

详情

np.convolve正在执行 discrete convolution在两个输入数组之间。在这种情况下 np.ones(w),它将是一个与指定窗口长度一样多的数组(在这种情况下为 4)array([1., 1., 1 ., 1.])sample_list.

以下列表理解旨在复制 np.convolve 计算输出值的方式:

w = 4
np.array([sum(ones*sample_list[m:m+w]) for m in range(len(sample_list)-(w-1))]) / w

array([ 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5,
13.5, 14.5])

因此在每次迭代中,它会取 1 的数组与 sample_list 的当前 窗口 之间的内积。

Bellow 是如何计算第一个输出的示例,这样它会更清晰一些。请注意,在这种情况下,为卷积指定的使用模式是 valid,这意味着重叠被指定为始终完整:

[1,1,1,1]
[1,2,3,4,5,6,7,8...]
= (1*1 + 1*2 + 1*3 + 1*4) / 4 = 2.5

以及以下内容:

  [1,1,1,1]
[1,2,3,4,5,6,7,8...]
= (1*2 + 1*3 + 1*4 + 1*5) / 4 = 3.5

依此类推,如前所述产生 sample_list 移动平均值

关于python - 列表中每个连续段的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54620614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com