2012-06-26 12 views

Odpowiedz

8

Nie potrzebujesz biblioteki do prostego gaussowskiego 1D.

from math import pi, sqrt, exp 

def gauss(n=11,sigma=1): 
    r = range(-int(n/2),int(n/2)+1) 
    return [1/(sigma * sqrt(2*pi)) * exp(-float(x)**2/(2*sigma**2)) for x in r] 

Uwaga: to zawsze zwraca listę dziwne długości skupione wokół 0. Przypuszczam, że mogą wystąpić sytuacje, gdzie chcesz mieć jeszcze długości Gaussa z wartościami dla x = [... -1,5, -0,5, 0,5, 1,5, ...], ale w tym przypadku, będzie musiał nieco inną formułę i zostawię to dla was;) przykład

Wyjście z wartościami domyślnymi n = 11, sigma = 1:

>>> g = gauss() 
1.48671951473e-06 
0.000133830225765 
0.00443184841194 
0.0539909665132 
0.241970724519 
0.398942280401 
0.241970724519 
0.0539909665132 
0.00443184841194 
0.000133830225765 
1.48671951473e-06 

>>> sum(g) 
0.99999999318053079 
+0

Spodziewałem się, że powróci to jak krzywa guassowska po plt.hist (g), ale jest to pół-zgadnij – Moj

3

Spróbuj scipy.ndimage.gaussian_filter, ale czy naprawdę chcesz, żeby ker nel, czy też chcesz go zastosować? (W takim przypadku możesz po prostu użyć tej funkcji.) W pierwszym przypadku zastosuj filtr w tablicy, która ma 0 wszędzie, ale 1 w środku. Dla łatwiejszego do napisania przypadku 1d byłby to na przykład:

>>> ndimage.gaussian_filter1d(np.float_([0,0,0,0,1,0,0,0,0]), 1) 
array([ 1.33830625e-04, 4.43186162e-03, 5.39911274e-02, 
     2.41971446e-01, 3.98943469e-01, 2.41971446e-01, 
     5.39911274e-02, 4.43186162e-03, 1.33830625e-04])