私はPythonで配列を生成するためにループを使用する関数を持っています。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]
何度もループを使用していました。
私は間違っていますか?
あなたはそれを知っていれば...私が探していた正確に解決策を私は明白なインデントエラー –