私は地面までの半径距離からなるデータを持っており、毎に均等にサンプリングされてい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)
申し訳ありませんが、少し混乱しています-デバッグが非常にイライラしていたので、ポップアップした問題のいくつかに対して頭に浮かんだ最初の解決策(通常は読みにくいもの)を使用することになりました。しかし、それは限られた方法で機能します。