为什么每次运行循环时都没有得到相同的结果?

佩特拉

我正在做一些信号处理,并且在Python中有一个循环,其中我试图通过参数alpha优化结果ln(B)。当我运行它时,我得到的最佳alpha值为-0.8,但是当我在常规代码中使用它时,它给出的结果与循环给出的结果不同。为了清楚起见,常规代码的结果为〜4,而alpha = -0.8的循环结果为〜5。

我认为这很奇怪,因此在两次检查过程都相同之后,我对一个alpha = -0.8实例运行了循环代码,并得到与常规代码4相同的结果,而不是循环的结果在一个范围内迭代时给我的alpha = -0.8。然后,我遍历列表中的代码[-0.8,-0.8,-0.8, -0.8, -0.8, -0.8],发现对于第一个-0.8,我得到4,然后对于每个后续的我得到5。

是否有某些原因使循环会给我第一项与其他项不同的答案或过程?我一直盯着它看了好几个小时,却找不到我的错误。我以为也许我没有重置变量,但是差异只发生在第一次迭代和其余的迭代之间,而不是每次迭代。

这是我的循环:

alpharange = [-0.8,-0.8,-0.8, -0.8, -0.8, -0.8]

for alpha in alpharange:
  run += 1
  print("Run {0}, alpha = {1}".format(run, alpha))

  #find var_n
  denominator = 0 
  r = np.arange(1,16)
  for n in r:
    if n*fecho <= fmax: 
        denominator += (n*fecho)**(2-2*alpha)/(var_f[n*nf])**2
  var_n = numerator/denominator 
  print("var_n = ", var_n)

  #find lnB
  YB_ln = np.zeros(spec_H1.shape)
  B_t = np.arange(0,len(YB_ln[0,:]),1) #length of a row
  B_f = np.arange(0,len(YB_ln[:,0]),1) #length of a column 

  for nt in tzoomindx:
    for nf in fzoomindx:
      for n in r:
          if n*nf<realfreqs.size-1:
              f = realfreqs[n*nf]
              YB_ln[nf,nt] += (np.abs(2*np.real(spec_H1[n*nf,nt]*np.conj(spec_L1[n*nf,nt])) + np.abs(spec_H1[n*nf,nt])**2 + np.abs(spec_L1[n*nf,nt])**2 ))/(1/(var_n*(1/f**alpha)) + 1/var_f[n*nf]) - np.log(1 + (var_n*(1/f**alpha))/var_f[n*nf])    
  peak = np.max(YB_ln)
  peakcoord = np.where((YB_ln==peak))

  if peak > lnB_max:
    alpha_max = alpha
    lnB_max = peak
    time_max = t[peakcoord[1]]-tinterval
    freq_max = realfreqs[peakcoord[0]]
    var_n_max = var_n
    print("!!!!!NEW MAX:  alpha = {0} with peak {1} at time {2} and frequency {3}".format(alpha_max,lnB_max,time_max,freq_max))

  alphalist.append(alpha)
  lnBlist.append(peak)
  timelist.append(t[peakcoord[1]]-tinterval)
  freqlist.append(realfreqs[peakcoord[0]])
  print("Peak lnB = {0} at time {1} and frequency {2}. Time: {3} min {4} s".format(peak,t[peakcoord[1]]-tinterval,realfreqs[peakcoord[0]],(time.time()-start_time)//60,(time.time()-start_time)%60))

print("lnB is optimized at alpha = {0} with peak {1} at time {2} and frequency {3}, var_n = {4}".format(alpha_max,lnB_max,time_max,freq_max,var_n_max))
print("Run took {0} min, {1} s".format((time.time()-start_time)//60,(time.time()-start_time)%60)) 

和输出:

Run 1, alpha = -0.8
var_n =  (1.1668471858083481e-14+0j)

/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:72: ComplexWarning: Casting complex values to real discards the imaginary part

!!!!!NEW MAX:  alpha = -0.8 with peak 4.115523906554817 at time [1.0625] and frequency [72.]
Peak lnB = 4.115523906554817 at time [1.0625] and frequency [72.]. Time: 0.0 min 0.3648514747619629 s
Run 2, alpha = -0.8
var_n =  (3.664163403845884e-14+0j)
!!!!!NEW MAX:  alpha = -0.8 with peak 5.330720524005124 at time [1.0625] and frequency [72.]
Peak lnB = 5.330720524005124 at time [1.0625] and frequency [72.]. Time: 0.0 min 0.702958345413208 s
Run 3, alpha = -0.8
var_n =  (3.664163403845884e-14+0j)
Peak lnB = 5.330720524005124 at time [1.0625] and frequency [72.]. Time: 0.0 min 1.0434083938598633 s
Run 4, alpha = -0.8
var_n =  (3.664163403845884e-14+0j)
Peak lnB = 5.330720524005124 at time [1.0625] and frequency [72.]. Time: 0.0 min 1.375929832458496 s
Run 5, alpha = -0.8
var_n =  (3.664163403845884e-14+0j)
Peak lnB = 5.330720524005124 at time [1.0625] and frequency [72.]. Time: 0.0 min 1.7248213291168213 s
Run 6, alpha = -0.8
var_n =  (3.664163403845884e-14+0j)
Peak lnB = 5.330720524005124 at time [1.0625] and frequency [72.]. Time: 0.0 min 2.0683481693267822 s
lnB is optimized at alpha = -0.8 with peak 5.330720524005124 at time [1.0625] and frequency [72.], var_n = (3.664163403845884e-14+0j)
Run took 0.0 min, 2.069751739501953 s

(我忽略了该错误,因为复数值仅包含实部)。

对我来说很明显,变量var_n发生了变化,而这正是我得出的结果。我只是不确定为什么它只在第一次迭代中有所不同。

我的所有变量定义的完整代码如下,我只是不想使上面的代码混乱:

start_time = time.time()

#find the energy over the leading seconds

dt = t[1] - t[0]

inspiral = np.where((t-tinterval >= -2) & (t-tinterval <= 0))
Einspiral_sum = np.sum(E[inspiral])*dt

print("Summed E_inspiral = ", Einspiral_sum)

#find the 'constant'

noise = np.where((t-tinterval <= -5) & (t-tinterval >= -50))
Enoise = np.sum(E[noise])/(E[noise].size)

print("E_noise = ", Enoise)

#finding the variance 

var_f = var_f_same

fecho = 72 
nf = np.where((realfreqs==fecho))
nf = int(nf[0])
fmax = 300

tzoomindx = np.where((t-tinterval>=0.5)&(t-tinterval<=1.5))
tzoomindx = np.array(tzoomindx[0])
fzoomindx = np.where((realfreqs>=63)&(realfreqs<=92))
fzoomindx=np.array(fzoomindx[0])

upperbound = 0
lowerbound = -2
numerator = (Einspiral_sum - (Enoise*upperbound-Enoise*lowerbound))

run = 0
lnB_max = -1e5
lnBlist = []
alphalist = []
timelist = []
freqlist = []

#alpharange = np.arange(-1.5,1,0.1)
#alpharange = np.array([-0.5,-0.4,-0.3,-0.2,-0.1,0,0.1,0.2,0.3,0.4])
alpharange = [-0.8,-0.8,-0.8, -0.8, -0.8, -0.8]

for alpha in alpharange:
  run += 1
  print("Run {0}, alpha = {1}".format(run, alpha))

  #find var_n
  denominator = 0 
  r = np.arange(1,16)
  for n in r:
    if n*fecho <= fmax: 
        denominator += (n*fecho)**(2-2*alpha)/(var_f[n*nf])**2
  var_n = numerator/denominator #for Einspiral = sum

  #find lnB
  YB_ln = np.zeros(spec_H1.shape)
  B_t = np.arange(0,len(YB_ln[0,:]),1) #length of a row
  B_f = np.arange(0,len(YB_ln[:,0]),1) #length of a column 

  for nt in tzoomindx:
    for nf in fzoomindx:
      for n in r:
          if n*nf<realfreqs.size-1:
              f = realfreqs[n*nf]
              YB_ln[nf,nt] += (np.abs(2*np.real(spec_H1[n*nf,nt]*np.conj(spec_L1[n*nf,nt])) + np.abs(spec_H1[n*nf,nt])**2 + np.abs(spec_L1[n*nf,nt])**2 ))/(1/(var_n*(1/f**alpha)) + 1/var_f[n*nf]) - np.log(1 + (var_n*(1/f**alpha))/var_f[n*nf])    
  peak = np.max(YB_ln)
  peakcoord = np.where((YB_ln==peak))

  if peak > lnB_max:
    alpha_max = alpha
    lnB_max = peak
    time_max = t[peakcoord[1]]-tinterval
    freq_max = realfreqs[peakcoord[0]]
    var_n_max = var_n
    print("!!!!!NEW MAX:  alpha = {0} with peak {1} at time {2} and frequency {3}".format(alpha_max,lnB_max,time_max,freq_max))

  alphalist.append(alpha)
  lnBlist.append(peak)
  timelist.append(t[peakcoord[1]]-tinterval)
  freqlist.append(realfreqs[peakcoord[0]])
  print("Peak lnB = {0} at time {1} and frequency {2}. Time: {3} min {4} s".format(peak,t[peakcoord[1]]-tinterval,realfreqs[peakcoord[0]],(time.time()-start_time)//60,(time.time()-start_time)%60))

print("lnB is optimized at alpha = {0} with peak {1} at time {2} and frequency {3}, var_n = {4}".format(alpha_max,lnB_max,time_max,freq_max,var_n_max))
print("Run took {0} min, {1} s".format((time.time()-start_time)//60,(time.time()-start_time)%60))                 

E是我的信号的能量,spec_H1 / spec_L1是我的信号的频谱图,总而言之,我试图找到在特定时间和频率范围内信号的贝叶斯因子。

里奥洛

可能会随着您的迭代而nf in fzoomindx改变nf,这会在in的计算中denominator使用denominator += (n*fecho)**(2-2*alpha)/(var_f[n*nf])**2...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么每次通过此循环都没有得到一个封闭的XML节点?

为什么每次运行一个命令时位置变量都没有改变

为什么在此过程中我的条件都没有得到满足?

为什么我没有得到相同的结果?

为什么我的 JLabel 在每次点击时都没有更新?

当我编写自己的表达式时,为什么没有得到与tensorflow方法相同的结果?

为什么在for循环批处理脚本的每次迭代中都没有重新定义变量?

为什么所有具有相同类的元素都没有相同的填充?

为什么我没有得到加法的结果?

为什么AS(列名别名)没有得到最新结果?

为什么每次递归后我的变量都没有增加?

循环没有得到正确的数组位置,为什么?

为什么在执行交叉路口时没有得到结果?

当我从atexit处理程序调用exit时,为什么没有得到无限循环?

如何让python等待“什么都没有”,首先运行事件循环

为什么LongListSelector selectedItem什么都没有?

为什么$ 1输出什么都没有?

当我运行 engine.scala 时什么都没有发生

为什么两次使用grep时都没有显示输出?

为什么在python中阅读文本时尾部都没有?

为什么整个部分都没有显示背景

为什么我的整个LineairLayout都没有显示?

为什么在每行之后都没有打印?

为什么每次读取文件行时我的对象都没有存储到数组中?爪哇

为什么在使用授权密码和授权代码请求令牌时,我没有得到相同的声明?

当我在Kotlin中使用原始parseList函数时,为什么没有得到正确的结果?

当我使用交替而不是方括号扩展时,为什么在grep中没有得到结果?

使用Chrome插件Sense在ElasticSearch中进行搜索时,为什么我没有得到预期的结果?

当我的输入变量超过 1 个字符时,为什么我没有得到任何结果?