我有一个清单:
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
是一个选项,那么实现这一点的一个简单方法是使用^{输出
详细信息
^{} 正在两个输入数组之间执行discrete convolution。在本例中
np.ones(w)
,它将是一个与指定窗口长度(在本例中为4)一样多的数组array([1., 1., 1., 1.])
和sample_list
。你知道吗下面的列表旨在复制
np.convolve
计算输出值的方式:因此在每次迭代中,它将取1数组和当前
sample_list
的窗口之间的内积。你知道吗下面是一个如何计算第一个输出的例子,以便它更清楚一点。注意,在这种情况下,为卷积指定的使用模式是
valid
,这意味着,重叠被指定为总是完整的:如下所示:
依此类推,如前所述,收益率为
sample_list
的移动平均值。你知道吗您可以使用单行列表:
当然,如果你想要一个发电机,就用圆括号代替方括号。你知道吗
可以将函数
mean()
映射到压缩迭代器:相关问题 更多 >
编程相关推荐