Mam problemy z prawidłowym zrozumieniem numpy.where()
pomimo przeczytania the doc, this post i this other post.numpy.where() szczegółowy opis krok po kroku/przykłady
Czy ktoś może skomentować krok po kroku przykłady z tablicami 1D i 2D?
Mam problemy z prawidłowym zrozumieniem numpy.where()
pomimo przeczytania the doc, this post i this other post.numpy.where() szczegółowy opis krok po kroku/przykłady
Czy ktoś może skomentować krok po kroku przykłady z tablicami 1D i 2D?
Po błądzeniu przez chwilę zorientowałem się, i zamieszczam je tutaj, mając nadzieję, że pomoże to innym.
Intuicyjnie, np.where
jest 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
To może być również używany, aby wpisy w tablicy, które spełniają warunek:
>>> a[np.where(a < 8)]
array([5, 6, 7]) # selects from a entries 0, 1, 2
Gdy jest 2D array, np.where()
zwraca tablicę wierszy IDX-tych, a tablicą col idx to:
>>> a = np.arange(4,10).reshape(2,3)
array([[4, 5, 6],
[7, 8, 9]])
>>> np.where(a > 8)
(array(1), array(2))
tak, że jak w przypadku 1d, możemy użyć np.where()
t O się wpisy w tablicy 2D, które spełniają warunek:
>>> a[np.where(a > 8)] # selects from a entries 0, 1, 2
Array ([9])
zwrócenie uwagi, że a
jest 1d np.where()
nadal powraca tablicę IDX Row i tablicę col idx, ale kolumny mają długość 1, więc ostatnia jest pustą tablicą.
Walczyłem o zrozumienie np.where gdy używano go na 2d aż znalazłem twoją odpowiedź "Kiedy jest tablicą 2d, np.where() zwraca tablicę idxów rzędu i tablicę col idx's:". Dziękuję za to. –
Dziękuję Alexandre. Twoje komentarze pomogły, ja też zmagałem się ze zrozumieniem. – anonnoir
Po przeczytaniu dokumentu trzy razy poczułem się głupio i nadal nie rozwiązałem zagadki 'np.where (2d_array)', dziękuję za wyjaśnienie! Powinieneś zaakceptować własną odpowiedź. e: Oh, jest zamknięte. Cóż, nie powinno tak być – speedymcs
Oto trochę więcej zabawy. Odkryłem, że bardzo często NumPy robi dokładnie to, co chciałbym, aby zrobił - czasami szybciej jest po prostu wypróbować rzeczy niż czytać dokumenty. Właściwie najlepiej jest połączyć oba.
Myślę, że twoja odpowiedź jest w porządku (i można ją zaakceptować, jeśli chcesz). To tylko "dodatkowe".
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
daje:
wh: (array([1, 1]), array([1, 2]))
gt: [[False False False]
[False True True]]
x: (array([1, 1]), array([1, 2]))
... ale:
print "a[wh]: ", a[wh]
print "a[gt] ", a[gt]
print "a[x]: ", a[x]
daje:
a[wh]: [8 9]
a[gt] [8 9]
a[x]: [8 9]
Należy precyzyjnie * co * ty nie rozumiesz. Na pewno nie chcesz, abyśmy powtarzali wszystko od dokumentów. – timgeb
Nie wiem, dlaczego ludzie obrażają się z takimi pytaniami i zamykają je. Ale wiedz, że to pomogło wielu ludziom. – deadcode