Mag*_*n88 7 python numpy smooth gaussian scipy
我有一组点(x,y)作为两个向量x,y,例如:
from pylab import *
x = sorted(random(30))
y = random(30)
plot(x,y, 'o-')
Run Code Online (Sandbox Code Playgroud)

现在我想用高斯来平滑这些数据,并仅在x轴上的某些(规则间隔)点处对其进行评估.让我们说:
x_eval = linspace(0,1,11)
Run Code Online (Sandbox Code Playgroud)
我得到了一个提示,这个方法被称为"高斯和滤波器",但到目前为止,我还没有在numpy/scipy中找到任何实现,尽管它看起来似乎是一个标准问题乍一看.由于x值不是等间距,我不能使用scipy.ndimage.gaussian_filter1d.
通常这种平滑是通过毛皮空间并与内核相乘来完成的,但我真的不知道这是否可以使用不规则间隔的数据.
谢谢你的任何想法
对于非常大的数据集,这将会爆炸,但您要求的正确计算将按如下方式进行:
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()
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
3158 次 |
| 最近记录: |