# Convert NumPy array to 0 or 1 based on threshold

## Question:

I have an array below:

```
a=np.array([0.1, 0.2, 0.3, 0.7, 0.8, 0.9])
```

What I want is to convert this vector to a binary vector based on a threshold.

take threshold=0.5 as an example, element that greater than 0.5 convert to 1, otherwise 0.

The output vector should like this:

```
a_output = [0, 0, 0, 1, 1, 1]
```

How can I do this?

## Answers:

`np.where`

```
np.where(a > 0.5, 1, 0)
# array([0, 0, 0, 1, 1, 1])
```

### Boolean basking with `astype`

```
(a > .5).astype(int)
# array([0, 0, 0, 1, 1, 1])
```

`np.select`

```
np.select([a <= .5, a>.5], [np.zeros_like(a), np.ones_like(a)])
# array([ 0., 0., 0., 1., 1., 1.])
```

### Special case: `np.round`

This is the best solution if your array values are floating values between 0 and 1 and your threshold is 0.5.

```
a.round()
# array([0., 0., 0., 1., 1., 1.])
```

You could use `binarize`

from the `sklearn.preprocessing module`

.

However this will work only if you want your final values to be binary i.e. ‘0’ or ‘1’. The answers provided above are great of non-binary results as well.

```
from sklearn.preprocessing import binarize
a = np.array([0.1, 0.2, 0.3, 0.7, 0.8, 0.9]).reshape(1,-1)
x = binarize(a)
a_output = np.ravel(x)
print(a_output)
#everything together
a_output = np.ravel(binarize(a.reshape(1,-1), 0.5))
```