【问题标题】:Python function returns incorrect valuePython函数返回不正确的值
【发布时间】:2017-08-14 14:16:36
【问题描述】:

我在python中有一个函数,它使用for循环来生成一个数组;

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]

过去很多次都是为了同一个目的,没有问题。

我做错了什么?

【问题讨论】:

  • 我已经更正了缩进错误

标签: python arrays python-2.7 numpy


【解决方案1】:

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

signal_score = generate_signal()

【讨论】:

  • 一旦你知道它就很明显......正是我正在寻找的解决方案。谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
相关资源
最近更新 更多