Contamos con tu apoyo para compartir nuestros artículos sobre las ciencias de la computación.
Solución:
En numpy v1.7+, puede aprovechar la opción “dónde” para ufuncs. Puede hacer cosas en una línea y no tiene que lidiar con el administrador de contexto errstate.
>>> a = np.array([-1, 0, 1, 2, 3], dtype=float)
>>> b = np.array([ 0, 0, 0, 2, 2], dtype=float)
# If you don't pass `out` the indices where (b == 0) will be uninitialized!
>>> c = np.divide(a, b, out=np.zeros_like(a), where=b!=0)
>>> print(c)
[ 0. 0. 0. 1. 1.5]
En este caso, realiza el cálculo de división en cualquier lugar “donde” b no sea igual a cero. Cuando b es igual a cero, permanece sin cambios con respecto al valor que le dio originalmente en el argumento ‘fuera’.
Sobre la base de la respuesta de @Franck Dernoncourt, arreglando -1/0:
def div0( a, b ):
""" ignore / 0, div0( [-1, 0, 1], 0 ) -> [0, 0, 0] """
with np.errstate(divide='ignore', invalid='ignore'):
c = np.true_divide( a, b )
c[ ~ np.isfinite( c )] = 0 # -inf inf NaN
return c
div0( [-1, 0, 1], 0 )
array([0, 0, 0])
Sobre la base de las otras respuestas, y mejorando en:
0/0
manejo agregandoinvalid='ignore'
paranumpy.errstate()
- introduciendo
numpy.nan_to_num()
para convertirnp.nan
para0
.
Código:
import numpy as np
a = np.array([0,0,1,1,2], dtype='float')
b = np.array([0,1,0,1,3], dtype='float')
with np.errstate(divide='ignore', invalid='ignore'):
c = np.true_divide(a,b)
c[c == np.inf] = 0
c = np.nan_to_num(c)
print('c: 0'.format(c))
Producción:
c: [ 0. 0. 0. 1. 0.66666667]
Acuérdate de que te brindamos la opción de explicar si te ayudó.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)