Applying a function involving tensors on numpy array

Here’s what I am trying to do:
I am working on a toy problem of fitting a piecewise-linear function to some data. I have defined changepoints as deterministic locations where the slope of the line can change. What I want is to infer the values of the slopes at each of these changepoints. I have managed to run this using another method as outlined here. I am trying out an alternative approach here wherein I define the piecewise linear function f based on the stochastic slope values (delta).

I understand that I am mixing numpy arrays and tensors in a way that is not allowed. (Although, I don’t quite understand the real issue here). I was hoping someone could point me in the right direction to implementing this approach.

import theano
import numpy as np
import pymc3 as pm
from pymc3 import *

aa = pm.Model()

with aa:
    delta = pm.Laplace('delta', 0, 5, shape=(20,))
    x = np.linspace(0, 10, 200)
    changepoints = np.linspace(0, 10, 20)

    def f(t):
        arr = [*map(lambda x: int(x), np.array(changepoints) < t)]
        slope =, delta)
        gamma = -changepoints * delta
        intercept =, gamma)
        return slope*t + intercept

    y_obs = np.array(map(f, x))
    sigma = HalfCauchy("sigma", beta=10, testval=1.0)

    likelihood = Normal("y_obs", mu=y_obs, sigma=sigma, observed=y)