2011-08-13 12 views
6

Tengo una matriz numpy bidimensional (uint16), ¿cómo puedo truncar todos los valores por encima de cierta barrera (digamos 255) a esa barrera? Los otros valores deben permanecer iguales. Usar un ciclo anidado parece ineficaz y torpe.Cómo truncar los valores de una matriz numpy 2D

Respuesta

5
import numpy as np 
my_array = np.array([[100, 200], [300, 400]],np.uint16) 
my_array[my_array > 255] = 255 

la salida será

array([[100, 200], 
     [255, 255]], dtype=uint16) 
+0

funciona como una bomba! Gracias – nobody

6

En caso de que su pregunta no era tan relacionado con la profundidad de bits como la respuesta de JBernardo, la forma más general de hacerlo sería algo así como: (después de edición, mi respuesta es ahora más o menos la misma que la suya)

 
def trunc_to(my_array, limit): 
    too_high = my_array > limit 
    my_array[too_high] = limit 

Here 'Sa buen enlace de introducción para la indexación numpy bool.

19

En realidad no hay un método específico para esto, 'pinza':

import numpy as np 
my_array = np.array([[100, 200], [300, 400]],np.uint16) 
my_array.clip(0,255) # clip(min, max) 

de salida:

array([[100, 200], 
     [255, 255]], dtype=uint16) 
Cuestiones relacionadas