私は関数を以下のように定義します。EmiCtry
,percapita
およびyear
はグローバルパラメータです。私は異なったshreshold
とramprate
を選ぶという効果を見たいと思います。Pythonは定義された関数でループしますが、奇妙な値を出力します
def annual_emi_scale(shreshold, ramprate):
tmp = EmiCtry
for i in range(177):
for j in range(91):
if percapita[i,j] >= shreshold and year[j] >= 2020:
tmp[i,j] = tmp[i,j] * (1.-ramprate)
adj1 = cdutil.averager(tmp, axis=0,weights='equal',action='sum')
adj2 = cdutil.averager(adj1,axis=0,weights='equal',action='sum')
return adj1, adj2
それから私は、定義された関数でループを実行します。
emi = np.zeros([25, 91])
cum = np.zeros([5,5])
for ii in range(5):
shre = (ii + 1) * 20
for jj in range(5):
ramp = jj * 0.02
emi[ii*5+jj],cum[ii,jj] = annual_emi_scale(shre, ramp)
は出力が> 0 ii
のために奇妙であり、各ループtmp = EmiCtry
がまったく動作しませんした後、それはそうです。つまり、ii = 3
の場合、tmp = EmiCtry
はii = 2
のときにtmpの値を使用します。
ただし、ループの前にtmp1, tmp2 = annual_emi_scale(80, 0.00)
を実行すると、結果は正しくなります。しかし、ループの後に置くと、同じことが再び起こります。
EmiCtry
numpy.array()
です:
co2EmiCtry = original_data.astype(np.float)
を使用し、配列の独立したコピーを作成します。 – kindall
あなたはこのコードが何をすべきか、なぜ結果が "奇妙"なのかを記述してください。 – mkrieger1
'annual_emi_scale'または' main'ループの中で使われている 'i'を意味しますか? – mkrieger1