我的数据包括到地面的径向距离,每个d_theta
. 我想对其进行高斯平滑,但要使平滑窗口的大小在 x 中为常数,而不是点数为常数。有什么好方法可以做到这一点?
我做了一个函数来做它,但它很慢,我什至还没有放入将计算边缘的部分。
如果它有助于更快地做到这一点,我想你可以假设地板是平的,并用它来计算要采样的点数,而不是使用实际的 x 值。
这是我到目前为止所尝试的:
bs = [gaussian(2*n-1,n/2) for n in range (1,500)] #bring the computation of the
bs = [b/b.sum() for b in bs] #gaussian outside to speed it up
def uneven_gauss_smoothing(xvals,yvals,sigma):
newy = []
for i, xval in enumerate (xvals):
#find how big the window should be to have the chosen sigma
#(or .5*sigma, whatever):
wheres = np.where(xvals> xval + sigma )[0]
iright = wheres[0] -i if len(wheres) else 100
if i - iright < 0 :
newy.append(0) #not implemented yet
continue
if i + iright >= len(xvals):
newy.append(0) #not implemented
continue
else:
#weighted average with gaussian curve:
newy.append((yvals[i-iright:i+iright+1]*bs[iright]).sum())
return np.array(newy)
抱歉,这有点乱——调试起来非常令人沮丧,以至于我最终使用了第一个解决方案(通常是一个难以阅读的解决方案)来解决一些突然出现的问题。但它确实以有限的方式工作。