# PyMC3 elementwise if condition

**URL:** https://discourse.pymc.io/t/pymc3-elementwise-if-condition/8670
**Category:** Questions
**Tags:** aesara
**Created:** [January 27, 2022, 8:48am UTC](https://discourse.pymc.io/t/pymc3-elementwise-if-condition/8670 "2022-01-27T08:48:19Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![michnag](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/michnag/32/3376_2.png) [@michnag](https://discourse.pymc.io/u/michnag)
#### Post date: [January 27, 2022, 8:48am UTC](https://discourse.pymc.io/t/pymc3-elementwise-if-condition/8670/1 "2022-01-27T08:48:19Z")

</div>

I have the following model, where I have a feature space `X` of shape (NxTxK) which should be multiplied elementwise by `alpha` or `beta` depending on the sign of the value in `phi` which is also (NxTxK). The parameters `alpha` and `beta` are drawn from a prior distribution.  
With numpy, the syntax would be: `X = np.where(phi == 1, X*alpha, X*beta)`.  
So far I used the following code which however gave me an error message.

```auto
with pm.Model() as model:

    alpha = pm.Beta(name="alpha", alpha=0.5, beta=0.5)
    beta = pm.Beta(name="beta", alpha=0.5, beta=0.5)

    X= pm.Deterministic(name="X", var=pm.math.where(pm.math.eq(phi, 1), X* alpha, X * beta))

    b= pm.Normal(name="b", mu=0, sigma=1, shape=n_vars_1)
  
    eps = pm.InverseGamma(name="eps", alpha=9.0, beta=4.0)

    y_hat = pm.Deterministic(name="y_hat", var=pm.math.sum(X * b, axis=2)
    y_like = pm.Normal(name="y_like", mu=y_hat, sd=eps, observed=y)

```

---

<div class="post-metadata">

### Author: ![ricardoV94](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/ricardov94/32/5775_2.png) [@ricardoV94](https://discourse.pymc.io/u/ricardoV94)
#### Post date: [January 27, 2022, 12:04pm UTC](https://discourse.pymc.io/t/pymc3-elementwise-if-condition/8670/2 "2022-01-27T12:04:24Z")

</div>

What is the error message you are getting?

---

<div class="post-metadata">

### Author: ![michnag](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/michnag/32/3376_2.png) [@michnag](https://discourse.pymc.io/u/michnag)
#### Post date: [January 27, 2022, 12:25pm UTC](https://discourse.pymc.io/t/pymc3-elementwise-if-condition/8670/3 "2022-01-27T12:25:35Z")

</div>

TypeError: Condition given to the op has to be a scalar with 0 standing for False, anything else for True

---

<div class="post-metadata">

### Author: ![junpenglao](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/junpenglao/32/8_2.png) [@junpenglao](https://discourse.pymc.io/u/junpenglao)
#### Post date: [January 27, 2022, 2:53pm UTC](https://discourse.pymc.io/t/pymc3-elementwise-if-condition/8670/4 "2022-01-27T14:53:03Z")

</div>

Try `aesara.tensor.switch`

---

<div class="post-metadata">

### Author: ![ricardoV94](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/ricardov94/32/5775_2.png) [@ricardoV94](https://discourse.pymc.io/u/ricardoV94)
#### Post date: [January 27, 2022, 8:21pm UTC](https://discourse.pymc.io/t/pymc3-elementwise-if-condition/8670/5 "2022-01-27T20:21:56Z")

</div>

`where` is a provided alias to `switch` so it should have worked. Just to make sure check with `theano.tensor.switch` or `aesara.tensor.switch` depending on which version you are using.

What is `phi`?

---

<div class="post-metadata">

### Author: ![michnag](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/michnag/32/3376_2.png) [@michnag](https://discourse.pymc.io/u/michnag)
#### Post date: [January 27, 2022, 9:12pm UTC](https://discourse.pymc.io/t/pymc3-elementwise-if-condition/8670/6 "2022-01-27T21:12:10Z")

</div>

Phi is a TensorVariable that is drawn from a Bernoulli.  
If I determine phi before initializing the model as a numpy array the code works.  
Could it be that `where` or `switch`does not work for TensorVariables?

---

<div class="post-metadata">

### Author: ![ricardoV94](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/ricardov94/32/5775_2.png) [@ricardoV94](https://discourse.pymc.io/u/ricardoV94)
#### Post date: [January 27, 2022, 9:25pm UTC](https://discourse.pymc.io/t/pymc3-elementwise-if-condition/8670/7 "2022-01-27T21:25:47Z")

</div>

Those should definitely work with TensorVariables. Can you show the complete code, including the creation of `Phi`?
