Set numpy array elements to zero if they are above a specific threshold

前端 未结 3 1352
南笙
南笙 2020-12-12 21:11

Say, I have a numpy array consists of 10 elements, for example:

a = np.array([2, 23, 15, 7, 9, 11, 17, 19, 5, 3])

Now I want to eff

相关标签:
3条回答
  • In [7]: a = np.array([2, 23, 15, 7, 9, 11, 17, 19, 5, 3])
    
    In [8]: a[a > 10] = 0
    
    In [9]: a
    Out[9]: array([2, 0, 0, 7, 9, 0, 0, 0, 5, 3])
    
    0 讨论(0)
  • 2020-12-12 22:00

    If you don't want to change your original array

    In [1]: import numpy as np
    
    
    In [2]: a = np.array([2, 23, 15, 7, 9, 11, 17, 19, 5, 3])
    
    
    In [3]: b = np.where(a > 10, 0, a)
    
    
    In [4]: a
    
    Out[4]: array([ 2, 23, 15,  7,  9, 11, 17, 19,  5,  3])
    
    
    In [5]: b
    
    Out[5]: array([2, 0, 0, 7, 9, 0, 0, 0, 5, 3])
    
    0 讨论(0)
  • 2020-12-12 22:01

    Generally, list comprehensions are faster than for loops in python (because python knows that it doesn't need to care for a lot of things that might happen in a regular for loop):

    a = [0 if a_ > thresh else a_ for a_ in a]
    

    but, as @unutbu correctly pointed out, numpy allows list indexing, and element-wise comparison giving you index lists, so:

    super_threshold_indices = a > thresh
    a[super_threshold_indices] = 0
    

    would be even faster.

    Generally, when applying methods on vectors of data, have a look at numpy.ufuncs, which often perform much better than python functions that you map using any native mechanism.

    0 讨论(0)
提交回复
热议问题