2012-06-26 26 views

Respuesta

8

No necesita una biblioteca para un simple 1D gaussiano.

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] 

Nota: Esta siempre devolverá una lista de longitud impar en torno a 0. supongo que puede haber situaciones en las que se quieren incluso una longitud de Gauss con valores para x = [..., -1.5, -0.5, 0.5, 1.5, ...], pero en ese caso, se necesitaría una fórmula ligeramente diferente y lo dejo a usted;) ejemplo

de salida con valores por defecto 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

me esperaba que vuelve algo así como la curva Guassian después plt.hist (g), pero es un medio conjetura – Moj

3

Pruebe scipy.ndimage.gaussian_filter, pero ¿de verdad quiere el ker ¿O también quieres aplicarlo? (En cuyo caso puede usar esta función). En el primer caso, aplique el filtro en una matriz que es 0 en todas partes pero con un 1 en el centro. Para el caso 1d fácil-a-escritura, esto sería por ejemplo:

>>> 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]) 
Cuestiones relacionadas