Python错误为不同循环设置具有序列的数组元素[重复]
Posted
技术标签:
【中文标题】Python错误为不同循环设置具有序列的数组元素[重复]【英文标题】:Python error setting an array element with a sequence for different loops [duplicate] 【发布时间】:2018-07-13 22:02:34 【问题描述】:我的代码如下(在为循环设置值之前大约有 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 开始,但我不明白为什么这段代码会停在这里。
【问题讨论】:
dC
到底是什么?您永远不会在发布的代码中初始化它。我怀疑这是一个普通的 Python 列表(而不是 numpy 数组),在这种情况下 dC[j,n]
无效(您必须使用 dC[j][n]
进行多维索引)。
打印数据,(条件)表达式结果,任何相关的东西,都是一种有效的调试技术。您可以在违规行或catch the error 之前打印内容,然后在 except 套件中打印。它将为您提供更多关于正在发生的事情的线索。
【参考方案1】:
您的示例代码不完整。但我认为错误很明显。
通过定义
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)
【讨论】:
以上是关于Python错误为不同循环设置具有序列的数组元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用序列请求的数组设置数组元素在 1 维后具有不均匀的形状检测到的形状为 (2,)+ 不均匀部分