Я только что начал с Python вчера, и я получаю сообщение об ошибке, используя scipy.integrate.odeint
.Объект слишком глубокий для желаемого массива - scipy.integrate.odeint
Я определил функцию
def SIR(x, t, beta, gamma, mu, M):
, который принимает на numpy.array
объекты x
, t
и M
; и скалярные поплавки beta
, gamma
и mu
.
M
(60,60)
размер, но не думаю, что это имеет значение.
x
и t
оба неодноточечных, с x.shape
быть (180,)
и t.shape
быть (5000,)
. Я попытался дать им одноплодное измерение, таким образом, что они имеют формы (180,1)
и (5000,1)
соответственно, но я все еще получаю ту же ошибку:
In [1]: run measles_age.py
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/IPython/utils/py3compat.py in execfile(fname, *where)
173 else:
174 filename = fname
--> 175 __builtin__.execfile(filename, *where)
/Users/qcaudron/Documents/SIR/measles_age.py in <module>()
111
112
--> 113 x = integrate.odeint(SIR, x0, t, args=(beta, gamma, mu, M));
114
115 # plot(t, x);
/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/scipy/integrate/odepack.py in odeint(func, y0, t, args, Dfun, col_deriv, full_output, ml, mu, rtol, atol, tcrit, h0, hmax, hmin, ixpr, mxstep, mxhnil, mxordn, mxords, printmessg)
141 output = _odepack.odeint(func, y0, t, args, Dfun, col_deriv, ml, mu,
142 full_output, rtol, atol, tcrit, h0, hmax, hmin,
--> 143 ixpr, mxstep, mxhnil, mxordn, mxords)
144 if output[-1] < 0:
145 print _msgs[output[-1]]
Я получаю эту ошибку, даже если SIR
просто возвращает x
, и если я полосу все аргументы помимо x
и t
из него:
def SIR(x, t):
return x;
Как вы можете видеть, строка вызывает ошибку является
x = integrate.odeint(SIR, x0, t, args=(beta, gamma, mu, M));
EDIT:
Меня попросили добавить полный код для метода SIR
. Поскольку он относительно длинный, я уронил полный сценарий .py в pastebin: http://pastebin.com/RphJbCHN
Еще раз спасибо.
Добро пожаловать на python! Большинство этих точек с запятой не нужны в вашем коде. – askewchan
Спасибо. Я знаю, что они не нужны - я просто думаю, что с ними выглядит чище :) Спасибо за редактирование выше. – Quentin
Из [документации] (http://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.odeint.html) 'SIR' должен возвращать' dx/dt' в 't'. Это то, что делает «SIR»? – askewchan