2012-06-26 82 views

Trả lời

8

Bạn không cần thư viện cho 1D gaussian đơn giản.

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] 

Lưu ý: Điều này sẽ luôn trả về một danh sách độ dài trung tâm khoảng 0. Tôi cho rằng có thể có trường hợp bạn muốn Gaussian có giá trị dài cho x = [..., -1.5, -0.5, 0.5, 1.5, ...], nhưng trong trường hợp đó, bạn sẽ cần một công thức hơi khác nhau và tôi sẽ để lại cho bạn;) Ví dụ

Output với các giá trị mặc định 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

tôi đã mong đợi nó sẽ trả về một cái gì đó giống như đường cong Guassian sau plt.hist (g) nhưng đó là một nửa đoán – Moj

3

Hãy thử scipy.ndimage.gaussian_filter, nhưng bạn có thực sự muốn ker nel hay bạn cũng muốn áp dụng nó? (Trong trường hợp đó bạn chỉ có thể sử dụng chức năng này.) Trong trường hợp trước, áp dụng bộ lọc trên một mảng là 0 ở khắp mọi nơi nhưng với 1 ở giữa. Đối với trường hợp 1d dễ dàng-to-ghi, đây sẽ là ví dụ:

>>> 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]) 
Các vấn đề liên quan