Python错误设置一个数组元素,其中包含不同循环的序列

时间:2018-02-03 15:32:49

标签: python arrays loops numpy indexing

我的代码如下(在设置循环的值之前大约有100行似乎正在工作,所以我只包含了必要的值):

fraction=np.array([0.5, 0.3, 0.2])
tauC=np.array([30.,300.,100000.])

dC_memory=np.zeros((1,3))
dC_frac=np.zeros((1,3))    

for j in range(0,ens_num):

    dC_memory=np.zeros((1,3))
    for n in range(0,N-1):


                # C02 Concentration

                for m in range(0,3):

                    dC_frac[m]=fraction[m]*E[j,n+1]-dC_memory[m]/(tauC[m])
                    dC_memory[m]=dC_memory[m]+dC_frac[m]*dt
                    dC[j,n]=dC[j,n]+dC_frac[m]*dt



                C[j,n+1]=C[j,n]+dC[j,n]

                # Temperature

                dT[j,n]=((T2eq*math.log(C[j,n+1]/Cpi)/math.log(2))-T[j,n])*(dt/tauT)
                T[j,n+1]=T[j,n]+dT[j,n]

                # Adaptation

                dTadp[j,n]=(T[j,n]-Tadp[j,n])*dt/tauA
                Tadp[j,n+1]=Tadp[j,n]+dTadp[j,n]
                Tdiff[j,n+1]=0.5*(abs(T[j,n]-Tadp[j,n+1])+T[j,n]-Tadp[j,n+1])



                if yi[j,n+1]+xi0[k]<=mu:


                    count[j]=count[j]+1/N

当我运行此操作时,我在dC[j,n]=dC[j,n]+dC_frac[m]*dt

上收到错误
  

ValueError:使用序列设置数组元素。

我是python的新手,但我知道python索引从0开始,但我不明白为什么这段代码会停在这里。

1 个答案:

答案 0 :(得分:2)

您的示例代码不完整。但我认为这个错误是明确的。

通过定义

 dC_frac=np.zeros((1,3))

dC_frac是一个形状为(1, 3)多维数组。使用dC_frac.shape您会发现它是(1, 3)不是(3,)

因此在

for m in range(0,3):
    dC_frac[m]=fraction[m]*E[j,n+1]-dC_memory[m]/(tauC[m])
    ...

您的dC_frac[m]是一个包含3个元素的数组,不是标量。

如果您的dC[j, n]dt是标量,

dC[j,n]=dC[j,n]+dC_frac[m]*dt

这将为一个条目分配一个包含3个元素的数组。因此错误。

要修复,只需使用

dC_memory=np.zeros(3)
dC_frac=np.zeros(3)