I have a TensorFlow vector that only contains 1s and 0s, like `a = [0, 0, 0, 1, 0, 1]`, and conditional on the value of `a`, I want to draw new random values 0 or 1. If the value of `a` is 1, I want to draw a new value but if the value of `a` is 0 I want to leave it alone. So I've tried this:

```
import tensorflow as tf
import tensorflow_probability as tfp
tfd = tfp.distributions

# random draw of zeros and ones
a = tfd.Binomial(total_count = 1.0, probs = 0.5).sample(6)

```

which gives me `<tf.Tensor: shape=(6,), dtype=float32, numpy=array([0., 0., 0., 1., 0., 1.], dtype=float32)>` then if I redraw

```
# redraw with a different probability if value is 1. in the original draw
b = tf.where(a == 1.0, tfd.Binomial(total_count = 1., probs = 0.5).sample(1), a)

```

I would expect `tf.where` to give me a new vector `b` that has, on average, half of the 1s become 0s but instead it either returns a copy of `a` or a vector of all 0s. Example output would be one of `b = [0, 0, 0, 0, 0, 0]`, `b = [0, 0, 0, 0, 0, 1]`, `b = [0, 0, 0, 1, 0, 0]`, or `b = [0, 0, 0, 1, 0, 1]` . I could of course just use `b = tfd.Binomial(total_count = 1.0, probs = 0.25).sample(6)` but in my particular case the order of the original vector matters.

A more general situation might use a different distribution so that bit-wise operations can't be easily used. For example

```
# random draw of normals
a = tfd.Normal(loc = 0., scale = 1.).sample(6)
# redraw with a different scale if value is greater than zero in the original draw
b = tf.where(a > 0, tfd.Normal(loc = 0., scale = 2.).sample(1), a)

```