convert numpy array to 0 or 1

前端 未结 6 1577
小鲜肉
小鲜肉 2020-12-29 06:12
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,         


        
6条回答
  •  难免孤独
    2020-12-29 06:54

    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
    

提交回复
热议问题