为了账号安全,请及时绑定邮箱和手机立即绑定

Python“ValueError:使用序列设置数组元素。” 我看不出哪个部分不工作

Python“ValueError:使用序列设置数组元素。” 我看不出哪个部分不工作

慕侠2389804 2022-07-26 10:31:25
以下代码的目标是将函数“ddW”插入 odeint 以找到给定 X 的 W(稍后)。我正在使用打印功能来确保功能运行)。import matplotlib.pyplot as pltimport numpy as npfrom scipy.integrate import odeintimport pintu = pint.UnitRegistry()R = 8.31446261815324  * u.J/(u.mol*u.K)Rgas = R.to            (u.atm*u.L/(u.mol*u.K))P0  = 10    * u.atmT   = 400   * u.Kv0  = 2     * u.L/u.minα   = 0.02  * u.kg**-1k   = 1.4   * u.L**2/(u.mol*u.kg*u.min)FA0 = 0.5*P0*v0/(Rgas*T) #Assuming I.G.def ddW(param,w):                               #param: [X,P]    X       = param[0]    P       = u.Quantity(param[1]).magnitude    * u.atm    W       = u.Quantity(w).magnitude           * u.kg    d       = np.zeros(2)    d[0]    = k*FA0/(v0**2*P0)  * P*W*(1-X)     #dX/dW    d[1]    = -α/2 *P0**2       * (1-X)/P       #dP/dW    return dparam0 = [0,P0]Wrange = np.linspace(0,100) *u.kg#PBR     = odeint(ddW,param0,Wrange)#plt.plot(Wrange,PBR)print(ddW(param0,0))Traceback (most recent call last):  File "<ipython-input-1-83022bc3b5da>", line 1, in <module>    runfile(REDACTED, wdir=REDACTED)  File "C:\Users\Spencer\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile    execfile(filename, namespace)  File "C:\Users\Spencer\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile    exec(compile(f.read(), filename, 'exec'), namespace)  File "REDACTED", line 43, in <module>    print(ddW(param0,0))  File "REDACTED", line 33, in ddW    d[1]    = -α/2 *P0**2       * (1-X)/P       #dP/dWValueError: setting an array element with a sequence.在第 29 行定义 W 之前,我之前对现在的第 32 行(定义 d[0])有相同的错误消息。困扰我的是 d[1] 没有任何输入(据我所知) 的尺寸 > 1,所以它应该适合。
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

使用以下命令创建数组。您正在创建的数组是 float 类型,并且您在 d[0] 和 d[1] 中获得的值不是 float。

d = np.array(np.zeros(2), dtype=np.object)


查看完整回答
反对 回复 2022-07-26
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

假设您对第 32 行的修复(定义 d[0])是w用W您取 的大小的地方替换w,您需要对尝试放入 d[1] 的数量执行相同的操作。


=for line 32的右侧是无量纲Quantity对象,而=for line 33的右侧是具有维度的Quantity对象,standard_atmosphere / kilogram不能按原样放入数组d中,因为它只需要幅度,因此可以转换为 float 类型.


如果您想将数组保留d为 type ,请尝试此操作float:


val     = -a/2 *P0**2       * (1-X)/P       #dP/dW

d[1]    = val.magnitude


查看完整回答
反对 回复 2022-07-26
  • 2 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信