Prueba numpy.clip:
>>> import numpy
>>> a = numpy.arange(-10, 10)
>>> a
array([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2,
3, 4, 5, 6, 7, 8, 9])
>>> a.clip(0, 10)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Puede recortar solo la mitad inferior con clip(0).
>>> a = numpy.array([1, 2, 3, -4, 5])
>>> a.clip(0)
array([1, 2, 3, 0, 5])
Puede recortar solo la mitad superior con clip(max=n). (Esto es mucho mejor que mi sugerencia anterior, que implicaba pasar NaNal primer parámetro y usar outpara forzar el tipo):
>>> a.clip(max=2)
array([ 1, 2, 2, -4, 2])
Otro enfoque interesante es utilizar where:
>>> numpy.where(a <= 2, a, 2)
array([ 1, 2, 2, -4, 2])
Finalmente, considere la respuesta de aix . Prefiero clipoperaciones simples porque se autodocumenta, pero su respuesta es preferible para operaciones más complejas.
numpy? ¿Probaste el método de clip dea? La función incorporadanumpy.clipme da el mismo error, pero el método no.Otra solución minimalista de Python sin usar numpy:
[0 if i < 0 else i for i in a]No es necesario definir funciones adicionales.
a = [1, 2, 3, -4, -5.23, 6] [0 if i < 0 else i for i in a]rinde:
[1, 2, 3, 0, 0, 6]fuente
foraplicarlo a cada elemento de la lista, ponerlo después, significa que solo si se cumple la condición, entrará en la lista resultante.i < 0 ? 0 : ien C) dentro de una lista de comprensión. Coloque corchetes para que quede más claro[(0 if i < 0 else i) for i in a]. Poner el if después es usar la parte de filtro de la construcción de expresión de lista.[(i) for i in a if i < 0]solo devolverá una lista de elementos que sean menores que cero.Y otra posibilidad más:
In [2]: a = array([1, 2, 3, -4, 5]) In [3]: where(a<0, 0, a) Out[3]: array([1, 2, 3, 0, 5])fuente
Aquí hay una forma de hacerlo en Python sin NumPy. Cree una función que devuelva lo que desea y use una lista de comprensión o la función de mapa .
>>> a = [1, 2, 3, -4, 5] >>> def zero_if_negative(x): ... if x < 0: ... return 0 ... return x ... >>> [zero_if_negative(x) for x in a] [1, 2, 3, 0, 5] >>> map(zero_if_negative, a) [1, 2, 3, 0, 5]fuente