2017-08-14 127 views
0

我在python中有一个函数,它使用for循环来生成一个数组;Python函数返回不正确的值

from pylab import * 

r0 = 3. 
radius = 3*r0 
signal_centre_i = randint(radius,100-radius) 
signal_centre_j = randint(radius,100-radius) 
bg_score = 30 
SN_ratio = 1. 
S0 = 10. 
signal_score = 0 
def generate_signal(): 
    signal_array = zeros((101,101)) 
    for i in range(101): 
     for j in range(101): 
      r = ((i-signal_centre_i)**2 + (j-signal_centre_j)**2)**0.5 
      signal_array[i,j] = signal_array[i,j] + S0*(1+((r/r0)**2))**-1.5 
    signal_score = 0 
    for i in range(101): 
     for j in range(101): 
      if ((i - signal_centre_i)**2 + (j-signal_centre_j)**2)**0.5 <= radius: 
       signal_score = signal_array[i,j] + signal_score 
      elif (((i - signal_centre_i)**2 + (j-signal_centre_j)**2)**0.5 <= radius +1) and ((i - signal_centre_i)**2 + (j-signal_centre_j)**2)**0.5 > radius: 
       signal_array[i,j] = 10 
    return signal_score 

generate_signal() 

while (((signal_score/bg_score)**0.5) < SN_ratio - SN_ratio/2) or (((signal_score/bg_score)**0.5) > SN_ratio + SN_ratio/2): 
    if (signal_score/bg_score)**0.5 > SN_ratio: 
     print "Calculated SN: "+str((signal_score/bg_score)**0.5) 
     S0 = S0 - S0/10 
     print "S0: "+str(S0) 
     print "Signal score: "+str(signal_score) 
     generate_signal() 
    elif (signal_score/bg_score)**0.5 < SN_ratio: 
     print "Calculated SN: "+str((signal_score/bg_score)**0.5) 
     S0 = S0 + S0/10 
     print "S0: "+str(S0) 
     print "Signal score: " +str(signal_score) 
     generate_signal() 

我真的很抱歉代码的墙 - 如果有更好的方式来格式化,请让我知道。

该代码需要一个101x101阵列并在其上放置一个随机“信号”(所以当你使用imshow()函数时,你会得到一个亮点)。但是,当我运行这段代码时,signal score不会更新 - 我期望它在源中心周围的一个圆内打印数组的总值,然后更新该方程,以使该值趋于预定值。但是,这不会发生,并且signal score停留在零。

我已经使用循环形式的

for i in range(101): 
    for j in range(101): 
     if ((i - centre_i)**2 + (j - centre_j)**2)**0.5 <= radius: 
      score = score + array[i,j] 

多次在过去出于同样的目的,没有任何问题。

我在做什么错?

+0

我已经纠正了错误的压痕明显 –

回答

2

您每次调用它时都忽略generate_signal函数的返回值。您需要将其分配给模块范围中的signal_score变量。

signal_score = generate_signal() 
+0

一旦你知道它...完全解决方案,我一直在寻找。谢谢! –