2015-03-20 14 views
6

Chciałbym wiedzieć, jak usunąć pierwsze i ostatnie wiersze i kolumny z tablicy 2D w numpy. Załóżmy, że mamy (N+1) x (N+1) matrycę o nazwie H następnie w Matlab/Octave, kod użyję byłoby:Jak usunąć pierwsze i ostatnie wiersze i kolumny z tablicy 2D numpy?

Hsub = H(2:N,2:N); 

Co to jest równoważne kod w numpy? Pomyślałem, że np.reshape może zrobić to, co chcę, ale nie jestem pewien, jak uzyskać to, aby usunąć tylko wiersze docelowe, jak myślę, że jeśli zmienię na macierz (N-1) x (N-1), usunie dwa ostatnie wiersze i kolumny.

Odpowiedz

9

Co powiesz na to?

Hsub = H[1:-1, 1:-1] 

Zakres 1:-1 oznacza, że ​​dostęp do elementów w drugim indeksie lub 1, i przejść do przedostatniego wskaźnika, jak wskazano przez -1 o wymiarze. Robimy to dla obu wymiarów niezależnie. Gdy wykonasz to niezależnie dla obu wymiarów, wynikiem jest przecięcie, w jaki sposób uzyskujesz dostęp do każdego wymiaru, który w zasadzie odcina pierwszy wiersz, pierwszą kolumnę, ostatni wiersz i ostatnią kolumnę.

Pamiętaj, indeks zakończenie jest wyłącznym, więc jeśli zrobiliśmy 0:3 na przykład, mamy tylko trzy pierwsze elementy wymiaru, a nie cztery.

Ponadto, indeksy ujemne oznaczają, że mamy dostęp do tablicy od koniec. -1 to ostatnia wartość, do której można uzyskać dostęp w danym wymiarze, ale z powodu wyłączności przechodzimy do drugiego ostatniego elementu, a nie ostatniego elementu. Zasadniczo jest to to samo, co:

... ale użycie ujemnych wskaźników jest znacznie bardziej eleganckie. Nie musisz również używać liczby wierszy i kolumn, aby wydobyć to, czego potrzebujesz. Powyższa składnia jest niezależna od wymiaru. Musisz jednak upewnić się, że macierz ma co najmniej 3 x 3, lub otrzymasz błąd.

Mały premia

w Matlab/Octave, można osiągnąć to samo bez użycia wymiarów przez:

Hsub = H(2:end-1, 2:end-1); 

end kluczowe w odniesieniu do indeksowania znaczy dostać ostatni element na dany wymiar.

Przykład użyciu

Oto przykład (stosując ipython)

In [1]: import numpy as np 

In [2]: H = np.meshgrid(np.arange(5), np.arange(5))[0] 

In [3]: H 
Out[3]: 
array([[0, 1, 2, 3, 4], 
     [0, 1, 2, 3, 4], 
     [0, 1, 2, 3, 4], 
     [0, 1, 2, 3, 4], 
     [0, 1, 2, 3, 4]]) 

In [4]: Hsub = H[1:-1,1:-1] 

In [5]: Hsub 
Out[5]: 
array([[1, 2, 3], 
     [1, 2, 3], 
     [1, 2, 3]]) 

Jak widać w pierwszym wierszu, pierwszej kolumnie i ostatni wiersz i ostatniej kolumnie zostały usunięte z matrycy źródeł H a pozostała część została umieszczona w macierzy wyjściowej Hsub.

Powiązane problemy