bir kozmik ışın detektörü bir enerji spektrumuna sahiptir. Spektrum, üstel bir eğri izler, ancak içinde geniş (ve belki de çok az) topaklar olacaktır. Veriler, belli ki, bir gürültü unsuru içerir.Gradyan, piton
Ben verileri düzeltmek ve daha sonra gradyan çizmek çalışıyorum. Şimdiye kadar bunu düzeltmek için scipy sline işlevini ve sonra np.gradient() öğesini kullanıyorum.
Resimde de görebileceğiniz gibi
, gradyan işlevin yöntem her bir nokta arasındaki farkları bulmak olduğunu ve çok net topaklar göstermez. temelde pürüzsüz bir gradyan grafik gerekir. Herhangi bir yardım Muhteşem olacak!denedim 2 spline yöntemleri:
def smooth_data(y,x,factor):
print "smoothing data by interpolation..."
xnew=np.linspace(min(x),max(x),factor*len(x))
smoothy=spline(x,y,xnew)
return smoothy,xnew
def smooth2_data(y,x,factor):
xnew=np.linspace(min(x),max(x),factor*len(x))
f=interpolate.UnivariateSpline(x,y)
g=interpolate.interp1d(x,y)
return g(xnew),xnew
düzenleme: Güvenilir sayısal türev:
def smooth_data(y,x,factor):
print "smoothing data by interpolation..."
xnew=np.linspace(min(x),max(x),factor*len(x))
smoothy=spline(x,y,xnew)
return smoothy,xnew
def minim(u,f,k):
""""functional to be minimised to find optimum u. f is original, u is approx"""
integral1=abs(np.gradient(u))
part1=simps(integral1)
part2=simps(u)
integral2=abs(part2-f)**2.
part3=simps(integral2)
F=k*part1+part3
return F
def fit(data_x,data_y,denoising,smooth_fac):
smy,xnew=smooth_data(data_y,data_x,smooth_fac)
y0,xnnew=smooth_data(smy,xnew,1./smooth_fac)
y0=list(y0)
data_y=list(data_y)
data_fit=fmin(minim, y0, args=(data_y,denoising), maxiter=1000, maxfun=1000)
return data_fit
Ancak, sadece aynı grafiği tekrar döner!
sizin için mantıklı olurdu yumuşatma hangi düzeyde? -1 ve +1 arasındaki değerlerin çoğu ile -10 ve +1 arasında bir türev oluşturan bir? – EOL
Yan Not: okuyabilir ve (http://www.python.org/dev/peps/pep-0008/) sizin "tarzı" kodlama için [PEP 8] uygulamanızı öneririz. Bu, çoğu Python programcısı (ya da iyi bir parçası) takip ettiği için kodunuzun okunmasını kolaylaştıracaktır. Atamalarda veya parametre listelerinde virgüllerden sonra '=' gibi normal boşluklar gibi küçük ayrıntılar, kodu daha okunaklı hale getirir. – EOL