Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么每次运行循环时都得不到相同的结果?_Python_Numpy_Loops - Fatal编程技术网

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

Python 为什么每次运行循环时都得不到相同的结果?,python,numpy,loops,Python,Numpy,Loops,我在做一些信号处理,我在Python中有一个循环,我试图在参数alpha上优化结果ln(B)。当我运行它时,我得到了一个最佳的alpha值-0.8,但是当我在常规代码中使用它时,它给了我一个不同于循环给我的结果。为了清楚起见,常规代码的结果是~4,而alpha=-0.8的循环结果是~5 我觉得这很奇怪,所以在反复检查每种情况下的过程都是相同的之后,我在alpha=-0.8的一个实例上运行了循环代码,得到了与常规代码4相同的结果,而不是循环在某个范围内迭代时在alpha=-0.8给出的结果。然后,

我在做一些信号处理,我在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,我得到了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)) 
(我忽略了这个错误,因为复杂值只有一个实部)

我很清楚,变量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))                 
start\u time=time.time()
#找出前几秒的能量
dt=t[1]-t[0]

inspiral=np。其中((t-tinterval>=-2)和(t-tinterval=0.5)和(t-tinterval=63)和(realfreqs可能,当您在fzoomindx中迭代
nf时,您会更改
nf
,该值用于计算
分母+=(n*fecho)**(2-2*alpha)/(var\u f[n*nf])**2
..

当您在fzoomindx中迭代
nf时,可能会更改
nf
,该值用于计算
分母+=(n*fecho)**(2-2*alpha)/(var_f[n*nf])**2

由于
变量
来自
分子
分母
,请尝试打印它们,并查看哪些正在更改。您正在重用常量“nf”作为for循环的变量并覆盖它。哦,您也看到了:)@michael Butscherth这是一个很好的代码量,你能提供一个吗?既然
var\u n
来自
分子
分母
,试着打印它们,看看哪一个在变化。你将常数“nf”重新用作for循环的变量并覆盖它。哦,你也看到了:)@michael Butscherth这是一个很好的代码量,你能提供一个吗?
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))