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
Author: BoltzmannBrain, 2016-06-30

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.

 29
Author: user2357112 supports Monica,
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.

 5
Author: shaojl7,
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

 0
Author: Nicolae Petridean,
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