Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

convert numpy array to 0 or 1

Tags:

A = np.array([[0.94366988, 0.86095311, 0.88896715, 0.93630641, 0.74075403, 0.52849619                   , 0.03094677, 0.85707681, 0.88457925, 0.67279696, 0.26601085, 0.4823794                   , 0.74741157, 0.78575729, 0.00978911, 0.9203284, 0.02453695, 0.84884703                   , 0.2050248, 0.03703224, 0.92931392, 0.11930532, 0.01411064, 0.7832698                   , 0.58188015, 0.66897565, 0.75119007, 0.01323558, 0.03402649, 0.99735115                   , 0.21031727, 0.78123225, 0.6815842, 0.46647604, 0.66323375, 0.03424828                   , 0.08031627, 0.76570656, 0.34760863, 0.06177743, 0.6987531, 0.4106426                   , 0.6648871, 0.02776868, 0.93053125, 0.46395717, 0.23971605, 0.9771735                   , 0.66202407, 0.10482388]]) 

Convert the entries of a into 0 (if activation <= 0.5) or 1 (if activation > 0.5)

for i in range(A.shape[1]): if A[i]>0.5:     Y_prediction[i] = 1 else:     Y_prediction[i] = 0 

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

And how to use vectorize this thx

like image 765
Ryan Wang Avatar asked Aug 12 '17 09:08

Ryan Wang


People also ask

Do NumPy arrays start at 0 or 1?

Access Array ElementsThe indexes in NumPy arrays start with 0, meaning that the first element has index 0, and the second has index 1 etc.

How do I convert a NumPy array to integer?

To convert numpy float to int array in Python, use the np. astype() function. The np. astype() function takes an array of float values and converts it into an integer array.

What is a 1 dimensional NumPy array?

One dimensional array contains elements only in one dimension. In other words, the shape of the NumPy array should contain only one value in the tuple.


1 Answers

I think you need vectorized function np.where:

B = np.where(A > 0.5, 1, 0) print (B) [[1 1 1 1 1 1 0 1 1 1 0 0 1 1 0 1 0 1 0 0 1 0 0 1 1 1 1 0 0 1 0 1 1 0 1 0 0   1 0 0 1 0 1 0 1 0 0 1 1 0]] 

B = np.where(A <= 0.5, 0, 1) print (B) [[1 1 1 1 1 1 0 1 1 1 0 0 1 1 0 1 0 1 0 0 1 0 0 1 1 1 1 0 0 1 0 1 1 0 1 0 0   1 0 0 1 0 1 0 1 0 0 1 1 0]] 

But better is holdenweb solution if need convert to 0 and 1 only.

np.where is better if need convert to another scalars like 5 and 10 or a and b:

C = np.where(A > 0.5, 5, 10) print (C) [[ 5  5  5  5  5  5 10  5  5  5 10 10  5  5 10  5 10  5 10 10  5 10 10  5    5  5  5 10 10  5 10  5  5 10  5 10 10  5 10 10  5 10  5 10  5 10 10  5    5 10]]  D = np.where(A > 0.5, 'a', 'b') print (D) [['a' 'a' 'a' 'a' 'a' 'a' 'b' 'a' 'a' 'a' 'b' 'b' 'a' 'a' 'b' 'a' 'b' 'a'   'b' 'b' 'a' 'b' 'b' 'a' 'a' 'a' 'a' 'b' 'b' 'a' 'b' 'a' 'a' 'b' 'a' 'b'   'b' 'a' 'b' 'b' 'a' 'b' 'a' 'b' 'a' 'b' 'b' 'a' 'a' 'b']] 

Timings:

np.random.seed(223) A = np.random.rand(1,1000000)  #jez In [64]: %timeit np.where(A > 0.5, 1, 0) 100 loops, best of 3: 7.58 ms per loop  #holdenweb In [65]: %timeit (A > 0.5).astype(int) 100 loops, best of 3: 3.47 ms per loop  #stamaimer In [66]: %timeit element_wise_round(A) 1 loop, best of 3: 318 ms per loop 
like image 128
jezrael Avatar answered Nov 07 '22 01:11

jezrael