使用二维向量中的序列设置数组元素时出错
Having an error of setting array element with a sequence in a two dimensional vector
我想用两个for循环计算一个二维向量,每个for循环计算一些参数。
我的输入是:
Temp= array([ 25., 30., 50., 25., 25., 25.])
Ir= array([ 1000., 500., 1000., 100., 200., 1000.])
在第一个循环中,我计算了一些向量,在内部循环中,我想计算一个大小为 len(V)*N
的矩阵 I(x,t)
问题:我收到以下内循环错误 (I(x,t)
):
ValueError: setting an array element with a sequence.
我的错误是什么,我该如何解决。
from math import *
from pylab import *
from numpy import *
Area=243.36
N=6
V = arange(0,0.7,0.01)
Jsc_cell = 0.03785
Isc_cell = Jsc_cell * Area
n1=1.0
J01 = 6.2e-13
Is1 = J01 * Area
n2= 2.0
J02 = 7.3e-9
Is2= J02 * Area
T_co = 0.0005
Rs = 2.7487398e-3
Rsh = 410913.8725
k = 1.38e-23
q = 1.6e-19
Eg=1.11
Tmeas= 273+25.0
Iph=zeros(N)
I0=zeros(N)
I02=zeros(N)
Vt=zeros(N)
I=zeros((len(V),N))
T=zeros(N)
for t in range(0,6):
T[t] = Temp[t]+273.0
Vt[t]=(k*T[t])/q
I0[t]=Is1*((T[t]/Tmeas)**(3/n1))*exp(Eg*((T[t]/Tmeas)-1)/(n1*Vt[t]));
I02[t]=Is2*((T[t]/Tmeas)**(3/n2))*exp(Eg*((T[t]/Tmeas)-1)/(n2*Vt[t]));
Iph[t] = Isc_cell*(Ir[t]/1000.0)*(1+(T_co*(Temp[t]-25)));
for x in range(len(V)):
I[x,t] = Iph[t] - I0[t]*(exp((V[x]+I[t]*Rs)/(n1*Vt[t]))-1)-I02[t]*(exp((V[x]+I[t]*Rs)/(n2*Vt[t]))-1)-((V[x]+I[t]*Rs)/Rsh);
x=x+1
t=t+1
您正在尝试将 1x2 数组(从 I[t]
计算)分配给 1x1 元素 I[x,t]
。
I[x,t] = Iph[t] - I0[t]*(exp((V[x]+I[t]*Rs)/(n1*Vt[t]))-1)-I02[t]*(exp((V[x]+I[t]*Rs)/(n2*Vt[t]))-1)-((V[x]+I[t]*Rs)/Rsh);
~~~~~~ ~~~~ ~~~~ ~~~~
那是行不通的。第二个元素应该发生什么?
顺便说一句:您可能不想手动增加循环计数器 x
和 t
。
我想用两个for循环计算一个二维向量,每个for循环计算一些参数。
我的输入是:
Temp= array([ 25., 30., 50., 25., 25., 25.])
Ir= array([ 1000., 500., 1000., 100., 200., 1000.])
在第一个循环中,我计算了一些向量,在内部循环中,我想计算一个大小为 len(V)*N
I(x,t)
问题:我收到以下内循环错误 (I(x,t)
):
ValueError: setting an array element with a sequence.
我的错误是什么,我该如何解决。
from math import *
from pylab import *
from numpy import *
Area=243.36
N=6
V = arange(0,0.7,0.01)
Jsc_cell = 0.03785
Isc_cell = Jsc_cell * Area
n1=1.0
J01 = 6.2e-13
Is1 = J01 * Area
n2= 2.0
J02 = 7.3e-9
Is2= J02 * Area
T_co = 0.0005
Rs = 2.7487398e-3
Rsh = 410913.8725
k = 1.38e-23
q = 1.6e-19
Eg=1.11
Tmeas= 273+25.0
Iph=zeros(N)
I0=zeros(N)
I02=zeros(N)
Vt=zeros(N)
I=zeros((len(V),N))
T=zeros(N)
for t in range(0,6):
T[t] = Temp[t]+273.0
Vt[t]=(k*T[t])/q
I0[t]=Is1*((T[t]/Tmeas)**(3/n1))*exp(Eg*((T[t]/Tmeas)-1)/(n1*Vt[t]));
I02[t]=Is2*((T[t]/Tmeas)**(3/n2))*exp(Eg*((T[t]/Tmeas)-1)/(n2*Vt[t]));
Iph[t] = Isc_cell*(Ir[t]/1000.0)*(1+(T_co*(Temp[t]-25)));
for x in range(len(V)):
I[x,t] = Iph[t] - I0[t]*(exp((V[x]+I[t]*Rs)/(n1*Vt[t]))-1)-I02[t]*(exp((V[x]+I[t]*Rs)/(n2*Vt[t]))-1)-((V[x]+I[t]*Rs)/Rsh);
x=x+1
t=t+1
您正在尝试将 1x2 数组(从 I[t]
计算)分配给 1x1 元素 I[x,t]
。
I[x,t] = Iph[t] - I0[t]*(exp((V[x]+I[t]*Rs)/(n1*Vt[t]))-1)-I02[t]*(exp((V[x]+I[t]*Rs)/(n2*Vt[t]))-1)-((V[x]+I[t]*Rs)/Rsh);
~~~~~~ ~~~~ ~~~~ ~~~~
那是行不通的。第二个元素应该发生什么?
顺便说一句:您可能不想手动增加循环计数器 x
和 t
。