gpt4 book ai didi

python - 不规则间隔点的高斯和滤波器

转载 作者:太空狗 更新时间:2023-10-29 21:29:04 25 4
gpt4 key购买 nike

我有一组点 (x,y) 作为两个向量x,y 例如:

from pylab import *
x = sorted(random(30))
y = random(30)
plot(x,y, 'o-')

enter image description here

现在我想用高斯平滑此数据,并仅在 x 轴上的某些(规则间隔的)点对其进行评估。让我们说:

x_eval = linspace(0,1,11)

我得到的提示是这种方法称为“高斯求和滤波器”,但到目前为止我还没有在 numpy/scipy 中找到任何实现,尽管乍一看这似乎是一个标准问题。由于 x 值的间距不等,我无法使用 scipy.ndimage.gaussian_filter1d。

通常这种平滑是通过 furrier 空间并与内核相乘完成的,但我真的不知道这是否适用于不规则间隔数据。

感谢任何想法

最佳答案

对于非常大的数据集,这会爆炸,但您要求的正确计算将按如下方式完成:

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0) # for repeatability
x = np.random.rand(30)
x.sort()
y = np.random.rand(30)

x_eval = np.linspace(0, 1, 11)
sigma = 0.1

delta_x = x_eval[:, None] - x
weights = np.exp(-delta_x*delta_x / (2*sigma*sigma)) / (np.sqrt(2*np.pi) * sigma)
weights /= np.sum(weights, axis=1, keepdims=True)
y_eval = np.dot(weights, y)

plt.plot(x, y, 'bo-')
plt.plot(x_eval, y_eval, 'ro-')
plt.show()

enter image description here

关于python - 不规则间隔点的高斯和滤波器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24143320/

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