NumPy tiene la función / método eficiente nonzero()
para identificar los índices de elementos distintos de cero en un ndarray
objeto. ¿Cuál es la forma más eficiente para obtener los índices de los elementos que hacer tener un valor de cero?
144
where()
devuelve una tupla?numpy.where(x == 0)[1]
Está fuera de los límites. ¿a qué se acopla la matriz de índice entonces?np.zeros((3,))
por ejemplo , para hacer un vector de 3 longitudes. Sospecho que esto es para facilitar el análisis de los parámetros. De lo contrario, algo comonp.zeros(3,0,dtype='int16')
versusnp.zeros(3,3,3,dtype='int16')
sería molesto de implementar.where
devuelve una tupla dendarray
s, cada una de ellas correspondiente a una dimensión de la entrada. en este caso, la entrada es una matriz, por lo que la salida es a1-tuple
. Si x fuera una matriz, sería una2-tuple
, y así sucesivamentenumpy.where
recomienda específicamente utilizarnumpy.nonzero
directamente en lugar de llamarwhere
con un solo argumento.Hay
np.argwhere
,que devuelve todos los índices encontrados como filas:
fuente
Puede buscar cualquier condición escalar con:
Lo que devolverá la matriz como una máscara booleana de la condición.
fuente
a[a==0] = epsilon
También puede usarlo
nonzero()
al usarlo en una máscara booleana de la condición, porqueFalse
también es una especie de cero.Está haciendo exactamente lo mismo
mtrw
, pero está más relacionado con la pregunta;)fuente
nonzero
método para verificar las condiciones.Puedes usar numpy.nonzero para encontrar cero.
fuente
Si está trabajando con una matriz unidimensional, hay un azúcar sintáctico:
fuente
numpy.flatnonzero(numpy.logical_or(numpy.logical_or(x==0, x==2), x==7))
fuente
Lo haría de la siguiente manera:
fuente