2015-03-20 10 views
6

Ich würde gerne wissen, wie die ersten und letzten Zeilen und Spalten aus einem 2D-Array in numpy entfernen. Zum Beispiel, sagen wir haben eine (N+1) x (N+1) Matrix H dann in MATLAB/Octave genannt, würde der Code wäre ich verwenden:Wie entferne ich die ersten und letzten Zeilen und Spalten aus einem zweidimensionalen Array?

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

Was ist der entsprechende Code in Numpy? Ich dachte, dass np.reshape tun könnte, was ich will, aber ich bin mir nicht sicher, wie man es nur die Zielzeilen zu entfernen, wie ich denke, wenn ich zu einer Matrix umgestalten, wird es die letzten zwei Zeilen und Spalten entfernen.

Antwort

9

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.

Verwandte Themen