Python - 与高斯卷积
我需要用一个特定参数的高斯函数去处理下面的曲线,这个高斯函数的中心在3934.8A。
我遇到的问题是,我的曲线是一个离散的数组,而高斯函数是一个明确的连续函数。我该怎么才能把它们结合起来呢?
1 个回答
10
要做到这一点,你需要创建一个与曲线在同一空间尺度上离散化的高斯分布,然后进行卷积操作。
具体来说,假设你原来的曲线有N
个点,这些点在x轴上均匀分布(通常N
的范围在50到10,000之间)。那么,x轴上点与点之间的间距就是(物理范围)/(数字范围) = (3940-3930)/N
,代码大概是这样的:
dx = float(3940-3930)/N
gx = np.arange(-3*sigma, 3*sigma, dx)
gaussian = np.exp(-(x/sigma)**2/2)
result = np.convolve(original_curve, gaussian, mode="full")
这里的高斯分布是以零为中心的,并没有包括你提到的偏移量(我觉得加上偏移量会让事情变得复杂,因为卷积本身就是一种平移操作,从一开始就用已经平移的东西会让人困惑)。
我强烈建议保持所有的单位为真实的物理单位,就像我上面所做的那样。这样就很清楚,比如高斯分布的宽度是多少等等。