2016-05-03 1 views
0

У меня есть массив, который я хочу, чтобы применить 1d гауссовского фильтра, используя gaussian_filter1d SciPy без изменения краевых значений:SciPy 1D гладкие сохраняющие края

>>> from scipy.ndimage.filters import gaussian_filter1d 
>>> arr = [1.,2.,3.,4.,100.,5.,6.,7.,8.,9.,10.] 

Однако это не удается сохранить краевые значения 1 и 10:

>>> gaussian_filter1d(arr, 5, mode="nearest") 
>>> array([ 8.26708045, 9.54770677, 10.72077793, 11.70511557, 
      12.43900171, 12.89021341, 13.06040738, 12.98285813, 
      12.71434815, 12.32350223, 11.87856682]) 

ответ

0

Этот метод кажется излишне сложным, однако это сглаживает градиент, а не самих значений:

# Convolve with sobel filter 
grad = convolve(arr, [1,-1,0], mode="nearest")[:-1] 
# Smooth gradient 
smooth_grad = smooth_grad = gaussian_filter1d(grad, 5) 
# Integrate 
smoothed = [arr[0] + sum(smooth_grad[:x]) for x in range(len(arr))] 

Производные:

[1.0, 3.6, 6.0, 9.6, 10.7, 11.3, 11.5,11.2,10.7,10.0]