我定义了一个函数,EmiCtry
,percapita
和year
是全局参数。我希望看到选择不同shreshold
和ramprate
的效果。
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)
ii
>的输出很奇怪0并且似乎在每个循环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)
答案 0 :(得分:1)
您需要复制数组EmiCtry
,以防止tmp
上的修改影响原始数据。
您的行tmp = EmiCtry
只是将名称tmp
绑定到EmiCtry
指向的同一对象。两个名称都指向内存中的相同位置。如果你修改一个,另一个也将被修改。
要制作数组的独立副本,请使用tmp = numpy.copy(EmiCtry)