2013-02-01 13 views
13

Powiel możliwe:
numpy: access an array by columntylko coraz poszczególnych kolumn w każdym wierszu w numpy tablicy

mam numpy array (numpy jest importowany jako NP)

gona = np.array([[ 1, 2, 3], 
     [ 4, 5, 6], 
     [ 7, 8, 9], 
     [10, 11, 12]]) 

Mogę uzyskać wartości całej kolumny z pierwszego rzędu przez gona [1] [:].

array ([4, 5, 6])

Ale gdy próbuję uzyskać wszystkie wartości danej kolumny wszystkich wierszy (powiedzmy chcę wartości 1 kolumna w każdym rzędzie) I spróbowałbym gona [:] [1]. Ale wynik, jaki otrzymuję z tego, jest taki sam jak poprzednio.

Jaki może być tego powód? Jak zrobić coś takiego w numpy?

+1

nie. Chciałem wiedzieć, dlaczego oba sposoby dają takie same wyniki. – maheshakya

Odpowiedz

28

rzeczywiście chcesz to zrobić:

>>> a 
array([[ 1, 2, 3], 
     [ 4, 5, 6], 
     [ 7, 8, 9], 
     [10, 11, 12]]) 
>>> a[:,1] 
array([ 2, 5, 8, 11]) 

a[:] prostu zwraca całą tablicę, więc wtedy a[:][1] jest zwrócenie drugi wiersz a. Myślę, że właśnie tu powstaje twoje zamieszanie.

W sekcji this można znaleźć więcej informacji na temat indeksowania tablic wielowymiarowych.

+2

'a [:] [1]' wybiera drugi wiersz –

+0

Ups. Masz rację. Poprawiłem to. –

+1

To się stało. Dziękujemy – maheshakya

-1

Jak to:

gona = numpy.array([[ 1, 2, 3], 
     [ 4, 5, 6], 
     [ 7, 8, 9], 
     [10, 11, 12]]) 

# List comprehension, just get each element in 'gona', and then get first element in that list 
out = [x[0] for x in gona] 

print out 

wyjściowa:

>>> 
[1, 4, 7, 10] 
>>> 
6

Wygląda na to, że istnieje niewielkie zamieszanie pod względem pozycjonowania nawiasów klamrowych, najpierw wybiera wszystko z tablicy, a następnie z tej tablicy wybiera drugi wiersz. Aby wybrać poszczególne kolumny umieścić indeksów w tych samych nawiasach kwadratowych oddzielone przecinkiem:

gona = np.array([[ 1, 2, 3], 
     [ 4, 5, 6], 
     [ 7, 8, 9], 
     [10, 11, 12]]) 

gona[1,:] 
Out[21]: array([4, 5, 6]) 

gona[:,1] 
Out[22]: array([ 2, 5, 8, 11]) 

gona[:,0] 
Out[23]: array([ 1, 4, 7, 10]) 

można też po prostu wybrać zakres wierszy na przykład

gona[0:2,0] # only take the two first rows of the first column 
Out[24]: array([2, 5]) 
+0

dziękuję osobno za wybór zakresu kodów wierszy :) – tieorange

Powiązane problemy