zeros functions python numpy

functions - python numpy doc



numpy reemplazar valores negativos en matriz (5)

¿Alguien puede aconsejar una forma simple de reemplazar todos los valores negativos en una matriz con 0?

Tengo un bloque completo sobre cómo hacerlo usando una matriz numpy

p.ej

a = array([1, 2, 3, -4, 5])

necesito regresar

[1, 2, 3, 0, 5]

a < 0 da:

[False, False, False, True, False]

Aquí es donde estoy atascado: cómo usar esta matriz para modificar la matriz original


Aquí hay una manera 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 map .

>>> 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]


Estás a mitad de camino allí. Tratar:

In [4]: a[a < 0] = 0 In [5]: a Out[5]: array([1, 2, 3, 0, 5])


Otra solución minimalista de Python sin usar numpy:

[0 if i < 0 else i for i in a]

No es necesario definir ninguna función adicional.

a = [1, 2, 3, -4, -5.23, 6] [0 if i < 0 else i for i in a]

rendimientos:

[1, 2, 3, 0, 0, 6]


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 el 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 implicó pasar NaN al primer parámetro y usar out para forzar el tipo).

>>> a.clip(max=2) array([ 1, 2, 2, -4, 2])

Otro enfoque interesante es usar where :

>>> numpy.where(a <= 2, a, 2) array([ 1, 2, 2, -4, 2])

Finalmente, considere la respuesta de aix . Prefiero clip para operaciones simples porque es autodocumentado, pero su respuesta es preferible para operaciones más complejas.


Y aún otra posibilidad:

In [2]: a = array([1, 2, 3, -4, 5]) In [3]: where(a<0, 0, a) Out[3]: array([1, 2, 3, 0, 5])