gpt4 book ai didi

python - numpy 数组的组平均值?

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:40 28 4
gpt4 key购买 nike

我有一个大的 numpy 数组,维度为 [1]。我想找出一种“群体平均”。更具体地说,

让我的数组为 [1,2,3,4,5,6,7,8,9,10] 让我的 group_size 3。因此,我将对前三个元素、第 4 到第 6 个元素、第 7 到第 9 个元素进行平均,并对剩余元素进行平均(在这种情况下只有 1 个才能得到 - [2, 5, 8, 10]。不用说,我需要一个向量化的实现。

最后,我的目的是减少噪声图中的点数,以平滑具有大量振荡的一般模式。有没有正确的方法来做到这一点?我想要这两个问题的答案,以防他们有不同的答案。谢谢!

最佳答案

一个好的平滑函数是 kernel convolution .它的作用是将移动窗口中的小数组乘以较大的数组。

假设您选择了 1/3 * [1,1,1] 的标准平滑内核并将其应用于数组(内核需要奇数编号并进行归一化)。让我们将它应用于 [1,2,2,7,3,4,9,4,5,6]:

开始的内核中心位于第一个 2 上。然后它对自己和它的邻居进行平均,然后继续前进。结果是这样的:[1.67, 3.67, 4.0, 4.67, 5.33, 5.67, 6.0, 5.0]

请注意,数组缺少第一个和最后一个元素。

您可以使用 numpy.convolve 执行此操作,例如:

import numpy as np
a = np.array([[1,2,2,7,3,4,9,4,5,6]])
k = np.array([1,1,1])/3
smoothed = np.convolve(x, k, 'valid')

这样做的效果是您的中心值与其邻居的值平滑。您可以通过增加卷积核的大小来更改它,例如 5 [1,1,1,1,1]/5,或者给它一个高斯分布,这将使中央成员的压力超过外面的。阅读维基百科文章。

编辑

这可以按照问题的要求获得 block 平均值:

import numpy as np

a = [1,2,3,4,5,6,7,8,9,10]
size = 3

new_a = []
i = 0
while i < len(a):
val = np.mean(a[i:i+3])
new_a.append(val)
i+=size

print(new_a)

[2.0, 5.0, 8.0, 10.0]

关于python - numpy 数组的组平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41157482/

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