Python为不同循环设置具有序列的数组元素时出错

Python为不同循环设置具有序列的数组元素时出错,python,arrays,loops,numpy,indexing,Python,Arrays,Loops,Numpy,Indexing,我的代码如下(在为循环设置值之前大约有100行代码,它们似乎正在工作,所以我只包含了必要的值): fraction=np.array([0.5,0.3,0.2]) tauC=np.数组([30,300,100000.])) dC_内存=np.零((1,3)) dC_frac=np.零((1,3)) 对于范围内的j(0,ens_num): dC_内存=np.零((1,3)) 对于范围(0,n-1)内的n: #二氧化碳浓度 对于范围(0,3)内的m: dC_frac[m]=分数[m]*E[j,n+1

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

fraction=np.array([0.5,0.3,0.2])
tauC=np.数组([30,300,100000.]))
dC_内存=np.零((1,3))
dC_frac=np.零((1,3))
对于范围内的j(0,ens_num):
dC_内存=np.零((1,3))
对于范围(0,n-1)内的n:
#二氧化碳浓度
对于范围(0,3)内的m:
dC_frac[m]=分数[m]*E[j,n+1]-dC_存储器[m]/(tauC[m])
dC_存储器[m]=dC_存储器[m]+dC_分形[m]*dt
dC[j,n]=dC[j,n]+dC_分形[m]*dt
C[j,n+1]=C[j,n]+dC[j,n]
#温度
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]
#适应化
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])

如果yi[j,n+1]+xi0[k]您的示例代码不完整。但我认为错误是显而易见的

通过定义

 dC_frac=np.zeros((1,3))
您的
dC\u frac
是一个多维形状数组
(1,3)
。使用
dC\u 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\u 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) 

您的示例代码不完整。但我认为错误是显而易见的

通过定义

 dC_frac=np.zeros((1,3))
您的
dC\u frac
是一个多维形状数组
(1,3)
。使用
dC\u 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\u 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) 

什么是dC
?您从未在发布的代码中初始化它。我怀疑这是一个普通的Python列表(而不是numpy数组),在这种情况下,
dC[j,n]
无效(您必须使用
dC[j][n]
进行多维索引)。打印数据,(条件)表达式结果,任何相关的,都是一种有效的调试技术。您可以在有问题的行之前打印内容,也可以在except套件中打印。它会给你更多的线索来了解正在发生的事情。到底什么是
dC
?您从未在发布的代码中初始化它。我怀疑这是一个普通的Python列表(而不是numpy数组),在这种情况下,
dC[j,n]
无效(您必须使用
dC[j][n]
进行多维索引)。打印数据,(条件)表达式结果,任何相关的,都是一种有效的调试技术。您可以在有问题的行之前打印内容,也可以在except套件中打印。它会给你更多的线索来了解正在发生的事情。