# Bayesian for simple ODE model. ValueError: Setting an array element with a sequence

The following code gives an error as setting an array element with a sequence. I’m new to PyMC3 and Bayesian. Any help or workaround is appreciated.

``````import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
import pymc3 as pm

#Actual Solution of the Differential Equation(Used to generate data)
def actual(a,b,x):
Y =  np.exp(-b*x)*(a*np.exp(b*x)*(b*x-1)+a+b**2)/b**2
return Y

#Method For Solving the ODE
def soln(a=5.0, b=0.2):
def dy_dx(y, x):
return a*x - b*y
y0 = 1.0
Y, dict  = odeint(dy_dx,y0,xdata,full_output=True)
return np.ravel(Y)

#Generating Data for Bayesian Inference
a0, b0 = 5, 0.2
xdata = np.linspace(0, 21, 100)
ydata = actual(a0,b0,xdata)

# Adding some error to the ydata points
yerror = 10*np.random.rand(len(xdata))
ydata += np.random.normal(0.0, np.sqrt(yerror))
ydata = np.ravel(ydata)

# Number of Samples and Initial Conditions
nsample = 5000
y0 = 1.0

# Model for Bayesian Inference
model = pm.Model()
with model:
# Priors for unknown model parameters
alpha = pm.Uniform('alpha', lower=a0/2, upper=a0+a0/2)
beta = pm.Uniform('beta', lower=b0/2, upper=b0+b0/2)

# Expected value of outcome
mu = soln(alpha,beta)

# Likelihood (sampling distribution) of observations
Y_obs = pm.Normal('Y_obs', mu=mu, sd=yerror, observed=ydata)

trace = pm.sample(nsample, nchains=1)

pm.traceplot(trace)
plt.show()``````

You need to pass a theano function instead of a numpy function. Wrapping the numpy function into theano using theano.as_op might work as well but you won’t have gradient and cannot sample with NUTS.