我的代码如下(在设置循环的值之前大约有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开始,但我不明白为什么这段代码会停在这里。
答案 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)