Wie wäre es damit?
Hsub = H[1:-1, 1:-1]
Der 1:-1
Bereich bedeutet, dass wir Elemente aus dem zweiten Index zuzugreifen, oder 1
, und wir gehen zu dem zweiten Ende Index nach oben, wie durch die -1
für eine Dimension angegeben. Wir machen das für beide Dimensionen unabhängig voneinander. Wenn Sie das unabhängig für beide Dimensionen tun, ist das Ergebnis der Schnittpunkt, wie Sie auf jede Dimension zugreifen, die im Wesentlichen die erste Zeile, erste Spalte, letzte Zeile und letzte Spalte abschneidet.
Denken Sie daran, das Ende Index ist exklusive, also wenn wir 0:3
zum Beispiel haben wir nur die ersten drei Elemente einer Dimension bekommen, nicht vier.
Auch negative Indizes bedeuten, dass wir auf das Array von Ende zugreifen. -1
ist der letzte Wert, auf den in einer bestimmten Dimension zugegriffen werden kann, aber aufgrund der Exklusivität gelangen wir zum vorletzten Element, nicht zum letzten Element. Im Wesentlichen ist dies das gleiche wie:
... aber mit negativen Indizes ist viel eleganter. Sie müssen auch nicht die Anzahl der Zeilen und Spalten verwenden, um das zu extrahieren, was Sie benötigen. Die obige Syntax ist dimensionsunabhängig. Sie müssen jedoch sicherstellen, dass die Matrix mindestens 3 x 3 ist, oder Sie erhalten einen Fehler.
Kleiner Bonus
In MATLAB/Octave, können Sie das Gleiche erreichen, ohne die Abmessungen mit von:
Hsub = H(2:end-1, 2:end-1);
Das end
Schlüsselwort in Bezug auf die Indizierung bedeutet, das letzte Element für eine bestimmte zu erhalten Abmessungen.
Beispiel verwenden
Hier ist ein Beispiel (mit 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]])
Wie Sie die erste Reihe, erste Spalte, letzte Zeile und letzte Spalte entfernt wurden von der Quellenmatrix sehen H
und der Rest wurde in die Ausgangsmatrix Hsub
platziert.