I have a numpy matrix with float numbers mostly in range 0-255. However, there are some numbers that are a bit out of range (like -5.36, 270).
I want to convert the matr
You can use numpy.clip for that:
a = np.arange(10)
np.clip(a, 1, 8)
> array([1, 1, 2, 3, 4, 5, 6, 7, 8, 8])
clip will do the first step: clipping to the desired range.
After that, you can use ndarray.astype to truncate all the numbers into a uint8
array:
result = np.clip(x, 0, 255).astype(np.uint8)
A better way might be to use clip
's out
parameter to do the truncation all at once. In this case you'll have to explicitly pre-allocate the output buffer:
result = np.empty_like(x, dtype=np.uint8)
np.clip(x, 0, 255, out=result)