Alte Antwort,
es ist irgendwie verwirrend. Es gibt Ihnen die STANDORTE (alle), an denen Ihre Aussage wahr ist.
so:
>>> a = np.arange(100)
>>> np.where(a > 30)
(array([31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
99]),)
>>> np.where(a == 90)
(array([90]),)
a = a*40
>>> np.where(a > 1000)
(array([26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
94, 95, 96, 97, 98, 99]),)
>>> a[25]
1000
>>> a[26]
1040
Ich benutze es als Alternative zu list.index (), aber es hat auch viele andere Verwendungszwecke. Ich habe es noch nie mit 2D-Arrays verwendet.
http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html
Neue Antwort
Es scheint, dass die Person etwas grundlegenderes gefragt hat.
Die Frage war, wie SIE etwas implementieren können, das es einer Funktion (z. B. wo) ermöglicht, zu wissen, was angefordert wurde.
Beachten Sie zunächst, dass das Aufrufen eines der Vergleichsoperatoren eine interessante Sache ist.
a > 1000
array([False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True`, True, True, True, True, True, True, True, True, True], dtype=bool)`
Dies erfolgt durch Überladen der Methode "__gt__". Zum Beispiel:
>>> class demo(object):
def __gt__(self, item):
print item
>>> a = demo()
>>> a > 4
4
Wie Sie sehen können, war "a> 4" ein gültiger Code.
Eine vollständige Liste und Dokumentation aller überladenen Funktionen finden Sie hier: http://docs.python.org/reference/datamodel.html
Unglaublich ist, wie einfach das geht. ALLE Operationen in Python werden so ausgeführt. A> b zu sagen ist gleichbedeutend mit a. gt (b)!
numpy.where
2 ‚Betriebsart‘ hat, erste kehrt dieindices
, wocondition is True
und wenn optionale Parameterx
undy
vorhanden ist (gleiche Form wiecondition
oder sende solche Form!), Es wird wieder Werte aus ,x
wenncondition is True
nicht anders ausy
. Dies machtwhere
es vielseitiger und ermöglicht eine häufigere Verwendung. Danke