首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Return Array by func (1)与Python中的大小不匹配

Return Array by func (1)与Python中的大小不匹配
EN

Stack Overflow用户
提问于 2018-01-15 21:39:45
回答 1查看 837关注 0票数 3

我是python的新手,所以请耐心听我说。我在Python语言中使用odeint函数来求解一个模型,在这个模型中,我得到了一个错误: (1)返回的数组大小与y0 (2)的大小不匹配。。也许我在odeint函数中重新生成args是一个错误,但我看过一个相关的odeint LINK关于桩溢出的帖子,它可以很好地处理返回的参数。我不知道是什么问题,或者我可能在错误的方向上得到了错误。如果我错了,请纠正我。

from scipy import *
from scipy.integrate import odeint
from operator import itemgetter
import matplotlib
matplotlib.use('Agg')
from matplotlib.ticker import FormatStrFormatter
from pylab import *

import sys

ExpData = [1.0 , 1.1660520579009868 , 1.3688685188071037 , 1.6165891026469563 ,
           1.9191557810726714 ]

t_range = arange(0.0,20.0,0.1)

y0 = [1,0.5]
VarList = ["a","b"]
ParaList = ["k1","k2"]
k1 = 1
k2 = 2


def func(Y,t,modelID,t1,t2):
    return GenModel(Y,modelID,t1,t2)

def GenModel(Y,modelID,t1,t2):
    RetY = [None]
    if modelID == 1:
        RetY = Y[0] + Y[1]
    elif modelID == 2:
        RetY = t1*Y[0] + Y[1]
    elif modelID == 3:
        RetY = Y[0] + t1*Y[1]
# code reduced from here

    if Y[0] == 0 or Y[1] == 0:
        if modelID == 27:
            RetY = 0
        elif modelID == 28:
            RetY = 0
    if Y[0] != 0 and Y[1] != 0:
        if modelID == 27:
            RetY = Y[0]*Y[1]
        elif modelID ==28:
            RetY = t1*Y[0]*Y[1]
        elif modelID == 29:
            RetY = t2*Y[0]*Y[1]
           # code reduced from here as well
    return RetY

def EvalModelFitness(Stofloat,ExpData):
    Sum = 0.0
    for i in range(len(Stofloat)):
        Sum += (Stofloat[i]-ExpData[i])**2
    print Sum/len(Stofloat)

if y0[0] == 0 or y0[1] == 0:
    NumModels = 28
else:
    NumModels = 39

for j in range(1,NumModels+1):
    S = odeint(func, y0,t_range,args=(j,k1,k2))
    Stofloat = S[:,0].astype(type('float',(float,),{}))
    EvalModelFitness(Stofloat,ExpData)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-20 05:44:06

首先,你似乎没有在“func”函数中的任何地方使用t。

其次,返回的一组值的长度必须与Y0的长度匹配。在这里,您从函数返回一个值(1,就像错误状态一样),而Y0的长度是2(就像错误状态一样)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48264157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档