0
私がPythonで記述しようとしているIDLコードは、標準偏差の関数で一連の値からバックグラウンドノイズを計算します。ここでは、コードです:IDLコードをPythonに翻訳する
; (INPUT)
; data = 1-D array of intensities
; (OUTPUT)
; bck,sig = background and fluctuations (1 sig level)
; ndata = number of values upon which bck,sig are computed
; POSITIVE = retains only data values > 0
; NSIG = number of sigmas
if not(keyword_set(NSIG)) then nsig=3.
if keyword_set(POSITIVE) then begin
test=where(data gt 0.)
if test(0) ne -1 then data2=data(test) else begin
bck=0 & sig=-1 & ndata=0 & goto,out
endelse
endif else data2=data
if n_elements(data2) gt 1 then begin
bck=mean(data2,/double) & sig=stddev(data2,/double)
endif else begin
bck=data2(0) & sig=0 & ndata=1 & goto,out
endelse
ndata=1
loop:
test=where(abs(data2-bck) lt nsig*sig)
if n_elements(test) eq 1 then goto,out
ndata=n_elements(test)
moy=mean(data2(test),/double)
sig=stddev(data2(test),/double)
if moy eq bck then goto,out
bck=moy
goto,loop
out:
return
end
コードの心はループであり、ここではそれを複製する私の試みです:
def bg(array):
temp = []
for i in range(len(array)):
if array[i]-np.mean(array) < 3*np.std(array):
temp.append(array[i])
avg=mean(temp)
return avg
は、この正しいですか?元のコードは、3 * std以下の値の平均値しか見つけられませんか?
この行の1は実際には何を意味していますか? if n_elements(test) eq 1 then goto,out