freefrog
freefrog

Reputation: 705

Convert NumPy array to 0 or 1 based on threshold

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?

Upvotes: 43

Views: 57424

Answers (2)

conflicted_user
conflicted_user

Reputation: 349

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))

Upvotes: 0

cs95
cs95

Reputation: 403030

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.])

Upvotes: 83

Related Questions