Stara odpowiedź
jest trochę zagmatwana. Daje ci LOKALIZACJE (wszystkie z nich), gdzie twoje stwierdzenie jest prawdziwe.
więc:
>>> 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
Używam go jako alternatywy dla list.index (), ale ma też wiele innych zastosowań. Nigdy nie używałem go z tablicami 2D.
http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html
Nowa odpowiedź
Wydaje się, że osoba pytała o coś bardziej fundamentalnego.
Pytanie brzmiało, jak TY mógłbyś zaimplementować coś, co pozwala funkcji (na przykład gdzie) wiedzieć, czego zażądano.
Najpierw zwróć uwagę, że wywołanie dowolnego z operatorów porównania robi interesującą rzecz.
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)`
Odbywa się to poprzez przeciążenie metody „__gt__”. Na przykład:
>>> class demo(object):
def __gt__(self, item):
print item
>>> a = demo()
>>> a > 4
4
Jak widać, „a> 4” był prawidłowym kodem.
Możesz uzyskać pełną listę i dokumentację wszystkich przeciążonych funkcji tutaj: http://docs.python.org/reference/datamodel.html
Niesamowite jest to, jak łatwo to zrobić. WSZYSTKIE operacje w Pythonie są wykonywane w ten sposób. Powiedzenie a> b jest równoważne a. gt (b)!
numpy.wheremają 2 „tryby operacyjne”, pierwszy zwraca wartośćindices, gdziecondition is Truei jeśli występują parametry opcjonalnexiy(taki sam kształtconditionlub nadający się do nadawania do takiego kształtu!), Zwróci wartości z,xgdy jestcondition is Trueinaczejy. Dzięki temu jestwherebardziej wszechstronny i umożliwia częstsze używanie. Dzięki