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
.