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错误为不同循环设置具有序列的数组元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python错误使用序列设置数组元素

在训练 SVM 对图像进行分类时设置具有序列错误的数组元素

python错误设置数组元素与序列

使用序列请求的数组设置数组元素在 1 维后具有不均匀的形状检测到的形状为 (2,)+ 不均匀部分

ValueError:使用序列python,numpy设置数组元素[重复]

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