Given a scalar, a 1D or an N-D numpy (numeric) array, I'd like to replace all values less than threshold
with threshold
. So, for example:
def fn(a, threshold):
return ???
fn(2, 2.5) => 2.5 # scalar
fn([1, 2, 3, 4], 2.5) => [2.5, 2.5, 3, 4]] # 1-D
fn[[1, 2, 3, 4], [0, 2, 4, 6]], 2.5) => [[2.5, 2.5, 3, 4], [2.5, 2.5, 4, 6]] # 2-D
(Note: For ease of reading, I've shown the arrays above with ordinary Python array syntax, but they're actually numpy.ndarrays.)
I could use if
statements and dispatch on the type of a
to handle each case. But I'm still wrapping my head around numpy's broadcast methods: is there a simple numpy idiom for handling this situation?
CodePudding user response:
You can use maximum
:
np.maximum([[1, 2, 3, 4], [0, 2, 4, 6]], 2.5)
Or clip
:
np.clip([[1, 2, 3, 4], [0, 2, 4, 6]], 2.5, np.inf)
Output:
array([[2.5, 2.5, 3. , 4. ],
[2.5, 2.5, 4. , 6. ]])