Dlaczego indeksowanie tablic numpy z nawiasami i przecinkami różni się zachowaniem?
Mam tendencję do indeksowania tablic numpy (macierzy) za pomocą nawiasów, ale zauważyłem, że gdy chcę pokroić tablicę (macierz), muszę użyć notacji przecinkowej. Dlaczego? Na przykład,
>>> x = numpy.array([[1, 2], [3, 4], [5, 6]])
>>> x
array([[1, 2],
[3, 4],
[5, 6]])
>>> x[1][1]
4 # expected behavior
>>> x[1,1]
4 # expected behavior
>>> x[:][1]
array([3, 4]) # huh?
>>> x[:,1]
array([2, 4, 6]) # expected behavior
3 answers
To:
x[:, 1]
Oznacza "weź wszystkie indeksy x
wzdłuż pierwszej osi, ale tylko indeks 1 wzdłuż drugiej".
To:
x[:][1]
Oznacza "weź wszystkie indeksy x
wzdłuż pierwszej osi (więc wszystkie x
), a następnie weź indeks 1 wzdłuż pierwszej osi wyniku". Stosujesz 1
do niewłaściwej osi.
x[1][2]
i x[1, 2]
są równoważne, ponieważ indeksowanie tablicy z liczbą całkowitą przesuwa wszystkie pozostałe osie w kierunku przodu kształtu, tak więc pierwsza oś x[1]
jest drugą osią x
. To w ogóle nie uogólnia; powinieneś prawie zawsze używać przecinków zamiast wielu kroków indeksowania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-30 04:34:03
W przypadku przecięcia wielu wymiarów tablicy, jeśli podano mniej indeksów niż liczba osi, brakujące indeksy są uważane za kompletne plasterki.
Stąd, gdy zasadniczo robisz wywołanie x[:][1]
jest x[:,:][1,:]
Dlatego x[:,:]
zwróci samo x.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-05 02:19:43
Prawdziwe wyjaśnienie tego jest w przypadku 2 nawiasów [] [], pierwszy nawias (x[] ) tworzy tymczasową tablicę odnoszącą się do pierwszego wymiaru tablicy wielowymiarowej.
Podczas gdy drugi nawias x [] [] zostanie zastosowany do już utworzonej tymczasowej tablicy.
Więc nie ma realnych zagrożeń. Ze względu na opisane zachowanie, przy łączeniu krojenia z wieloma nawiasami w zasadzie pierwszy z nich jest już zaznaczeniem części tablicy numpy, podczas gdy drugi nawias trafia do już wybranej tablicy.
Wyjaśnienie jest dostępne również tutaj: numpy.org/devdocs/user/basics.indexing.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-22 06:42:32