Mam problem ze zrozumieniem numpy.where()
pomimo przeczytania dokumentu , tego i tego innego postu .
Czy ktoś może podać przykłady z komentarzami krok po kroku z tablicami 1D i 2D?
Po jakimś czasie się zabawiłem, zorientowałem się, co się dzieje i zamieszczam je tutaj, mając nadzieję, że pomoże to innym.
Intuicyjnie np.where
jest to jak pytanie „ powiedz mi, gdzie w tej tablicy wpisy spełniają dany warunek ”.
>>> 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
Można go również użyć do pobrania wpisów w tablicy, które spełniają warunek:
>>> a[np.where(a < 8)]
array([5, 6, 7]) # selects from a entries 0, 1, 2
Kiedy a
jest tablicą 2d, np.where()
zwraca tablicę idx wierszy i tablicę idx kolumn:
>>> a = np.arange(4,10).reshape(2,3)
array([[4, 5, 6],
[7, 8, 9]])
>>> np.where(a > 8)
(array(1), array(2))
Podobnie jak w przypadku 1d, możemy użyć np.where()
do uzyskania wpisów w tablicy 2d, które spełniają warunek:
>>> a[np.where(a > 8)] # selects from a entries 0, 1, 2
tablica ([9])
Zauważ, że gdy a
wynosi 1d, np.where()
nadal zwraca tablicę idx wierszy i tablicę idx kolumn, ale kolumny mają długość 1, więc ostatnia jest pustą tablicą.
np.where(2d_array)
, dzięki za wyjaśnienie tego! Powinieneś zaakceptować własną odpowiedź. e: Och, jest zamknięte. Cóż, nie powinno byćnp.where
tej kompletnej odpowiedzi. Funkcja może także wybierać elementy z tablicy xiy w zależności od warunku. Ograniczona przestrzeń w tym komentarzu, ale zobacz: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]]))
powróciarray([[4, 8, 6], [9, 2, 1]])
. Zwróć uwagę, które elementy x i y są wybierane w zależności od Prawda / Fałszcondition
jest dostępna, funkcja ta jest skrótem dlanp.asarray(condition).nonzero()
.Tutaj jest trochę więcej zabawy. Zauważyłem, że bardzo często NumPy robi dokładnie to, czego bym sobie życzył - czasami szybciej jest po prostu próbować rzeczy niż czytać dokumenty. Właściwie najlepsze jest połączenie obu.
Myślę, że twoja odpowiedź jest w porządku (i możesz ją zaakceptować, jeśli chcesz). To jest po prostu „ekstra”.
daje:
... ale:
daje:
źródło