Alejandro Holden Daly
Traté de leer el documentación para numpy.where()
pero todavía estoy confundido.
¿Qué debo pasar por el condition
, x
y y
¿valores? Cuando paso solo condition
, ¿qué significa el resultado y cómo puedo usarlo? ¿Qué pasa cuando paso los tres?
Encontré ¿Cómo funciona python numpy.where()? pero no respondió a mi pregunta porque parece tratarse de la implementación y no de cómo usarlo. Numpy where() en una matriz 2D tampoco me explicó las cosas; Estoy buscando una explicación paso a paso, en lugar de una guía práctica para un caso específico.
Incluya ejemplos con datos de origen 1D y 2D.
Alejandro Holden Daly
Después de jugar un rato, descubrí las cosas y las estoy publicando aquí con la esperanza de que ayuden 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 columna:
>>> 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
formación([9])
Tenga en cuenta, cuando a
es 1d, np.where()
todavía devuelve una matriz de idx de fila y una matriz de idx de columna, pero las columnas tienen una longitud de 1, por lo que la última es una matriz vacía.
-
Estaba luchando por entender np.where cuando se usaba en 2d hasta que encontré su respuesta “Cuando a es una matriz 2d, np.where() devuelve una matriz de idx de fila y una matriz de idx de col:”. Gracias por eso.
– bencampbell_14
6 de mayo de 2017 a las 1:56
-
Me sentía bastante estúpido después de leer el documento tres veces y seguir sin resolver el acertijo.
np.where(2d_array)
, ¡Gracias por aclarar esto! Debes aceptar tu propia respuesta. e: Ah, está cerrado. Bueno, no debería ser– smcs
7 de marzo de 2018 a las 9:59
-
Es una pena que esto estuviera cerrado. Sin embargo, me gustaría agregar otra característica de
np.where
a esta respuesta por lo demás completa. La función también puede seleccionar elementos de la matriz x e y dependiendo de 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]]))
regresaráarray([[4, 8, 6], [9, 2, 1]])
. Observe qué elementos de x e y se eligen según Verdadero/Falso– flautín
4 de agosto de 2018 a las 12:06
-
La explicación dada en esta respuesta es solo un caso especial de np.where. De acuerdo con la documentación, cuando solo
condition
se proporciona, esta función es una abreviatura denp.asarray(condition).nonzero()
.– Lenny
12 de julio de 2020 a las 22:03
Aquí hay un poco más de diversión. Descubrí 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 simplemente “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]
-
stackoverflow.com/questions/52649568/use-of-np-where0
– asssss
15 de abril de 2020 a las 19:55