Tengo problemas para comprender correctamente a numpy.where()
pesar de leer el documento , esta publicación y esta otra publicación .
¿Alguien puede proporcionar ejemplos comentados paso a paso con matrices 1D y 2D?
Tengo problemas para comprender correctamente a numpy.where()
pesar de leer el documento , esta publicación y esta otra publicación .
¿Alguien puede proporcionar ejemplos comentados paso a paso con matrices 1D y 2D?
Respuestas:
Después de jugar un rato, descubrí las cosas y las publico aquí con la esperanza de que ayude a otros.
Intuitivamente, np.where
es como preguntar " dime dónde en esta matriz, las entradas satisfacen una condición dada ".
>>> a = np.arange(5,10)
>>> np.where(a < 8) # tell me where in a, entries are < 8
(array([0, 1, 2]),) # answer: entries indexed by 0, 1, 2
También se puede usar para obtener entradas en una matriz que satisfagan la condición:
>>> a[np.where(a < 8)]
array([5, 6, 7]) # selects from a entries 0, 1, 2
Cuando a
es una matriz 2d, np.where()
devuelve una matriz de idx de fila y una matriz de idx de col:
>>> a = np.arange(4,10).reshape(2,3)
array([[4, 5, 6],
[7, 8, 9]])
>>> np.where(a > 8)
(array(1), array(2))
Como en el caso 1d, podemos usar np.where()
para obtener entradas en la matriz 2d que satisfagan la condición:
>>> a[np.where(a > 8)] # selects from a entries 0, 1, 2
matriz ([9])
Tenga en cuenta que cuando a
es 1d, np.where()
aún devuelve una matriz de idx de fila y una matriz de idx de columna, pero las columnas son de longitud 1, por lo que esta última es una matriz vacía.
np.where(2d_array)
, ¡gracias por aclarar esto! Deberías aceptar tu propia respuesta. e: Oh, está cerrado. Bueno, no debería ser
np.where
a esta respuesta completa. La función también puede seleccionar elementos de la matriz xey según la condición. Espacio limitado en este comentario pero ver: np.where(np.array([[False,False,True], [True,False,False]]), np.array([[8,2,6], [9,5,0]]), np.array([[4,8,7], [3,2,1]]))
volverá array([[4, 8, 6], [9, 2, 1]])
. Observe qué elementos de x e y se eligen dependiendo de Verdadero / Falso
condition
se proporciona, esta función es una abreviatura para np.asarray(condition).nonzero()
.
Aquí hay un poco más de diversión. He descubierto que muy a menudo NumPy hace exactamente lo que desearía que hiciera: a veces es más rápido para mí probar cosas que leer los documentos. En realidad, una mezcla de ambos es lo mejor.
Creo que su respuesta está bien (y está bien aceptarla si lo desea). Esto es solo "extra".
import numpy as np
a = np.arange(4,10).reshape(2,3)
wh = np.where(a>7)
gt = a>7
x = np.where(gt)
print "wh: ", wh
print "gt: ", gt
print "x: ", x
da:
wh: (array([1, 1]), array([1, 2]))
gt: [[False False False]
[False True True]]
x: (array([1, 1]), array([1, 2]))
... pero:
print "a[wh]: ", a[wh]
print "a[gt] ", a[gt]
print "a[x]: ", a[x]
da:
a[wh]: [8 9]
a[gt] [8 9]
a[x]: [8 9]