2013-10-03 21 views
26

Jestem całkiem nowy w numpy i mam problemy ze zrozumieniem, jak wydobyć z np.array macierz sub z określonych kolumn i wierszy:Numpy ekstrakt podmacierz

Y = np.arange(16).reshape(4,4) 

Jeśli chcę wyodrębnić kolumny/wiersze 0 i 3, powinienem był:

[[0 3] 
[12 15]] 

Próbowałem wszystkich funkcji przekształcania ... ale nie mogę dowiedzieć się, jak to zrobić. Jakieś pomysły?

+3

Aby wyjaśnić, to o co prosisz, biorąc pod uwagę pożądane wyniki to kolumny/wiersze 0 i 3 – JoshAdel

Odpowiedz

35

Daj np.ix_ spróbować:

Y[np.ix_([0,3],[0,3])] 

ta zwraca pożądany rezultat:

In [25]: Y = np.arange(16).reshape(4,4) 
In [26]: Y[np.ix_([0,3],[0,3])] 
Out[26]: 
array([[ 0, 3], 
     [12, 15]]) 
+0

tak, to jest to! – user1595929

+2

@ user1595929 Jeśli uważasz, że to najlepsze rozwiązanie i prawidłowo odpowiadasz na oryginalne pytanie, sprawdź je jako zaakceptowane. – JoshAdel

10

Jednym z rozwiązań jest indeksowanie wiersze/kolumny przez krojenie/kroczącego. Oto przykład, gdzie jesteś wydobywania każdą trzecią kolumnę/wiersz z pierwszej do ostatniej kolumny (czyli pierwsze i czwarte kolumny)

In [1]: import numpy as np 
In [2]: Y = np.arange(16).reshape(4, 4) 
In [3]: Y[0:4:3, 0:4:3] 
Out[1]: array([[ 0, 3], 
       [12, 15]]) 

To daje wyjście czego szukasz.

Aby uzyskać więcej informacji, sprawdź this page on indexing in NumPy.

+0

Podoba mi się ta odpowiedź, ponieważ notacja jest podobna do notacji matlaba –

3

Przede wszystkim Twój Y ma tylko 4 kolumny i wiersze, więc nie ma col4 ani row4, co najwyżej col3 lub row3.

Aby uzyskać 0, 3 cols: Y[[0,3],:] dostać 0, 3 rzędy: Y[:,[0,3]]

Tak, aby uzyskać macierz, którą zażądania: Y[[0,3],:][:,[0,3]]

Zauważ, że jeśli tylko Y[[0,3],[0,3]] jest to równoważne [Y[0,0], Y[3,3]] i wynik będzie z dwóch elementów: array([ 0, 15])

4

można też to zrobić przy użyciu:

Y[[[0],[3]],[0,3]] 

co stanowi równowartość robi to za pomocą tablic indeksowania:

idx = np.array((0,3)).reshape(2,1) 
Y[idx,idx.T] 

, aby prace nadawania jako pożądany, trzeba non-singleton wymiar macierzy indeksowania być wyrównane z osią jesteś indeksowanie w np dla n x m 2D subarray:

Y[<n x 1 array>,<1 x m array>] 

nie utworzyć pośredni układ, w przeciwieństwie do odpowiedzi CT Zhu, który tworzy pośredni układ Y[(0,3),:], a indeksy do niego.

2
print y[0:4:3,0:4:3] 

to najkrótsza i najbardziej odpowiednia poprawka.

Powiązane problemy