2014-04-02 6 views
7

Soweit ich es sehen kann, ist es in der indexing, slicing and iterating scipy Tutorial nicht abgedeckt ist, so lassen Sie es mich hier fragen:Wie kann ich eine numpy Array schneiden erhalten beide die ersten und letzten zwei Reihen

Say ich habe

x = np.array([[1,2],[3,4],[5,6],[7,8],[9,0]]) 
x: array([[1, 2], 
      [3, 4], 
      [5, 6], 
      [7, 8], 
      [9, 0]]) 

Wie kann ich das Array, um in Scheiben schneiden erhalten beide die ersten und letzten Zeilen:

y: array([[1, 2], 
      [3, 4],    
      [7, 8], 
      [9, 0]]) 

Antwort

8

ich weiß nicht, ob es eine glatte Art und Weise ist, das zu tun. Sie könnten die Indizes explizit aufzulisten, natürlich:

>>> x[[0,1,-2,-1]] 
array([[1, 2], 
     [3, 4], 
     [7, 8], 
     [9, 0]]) 

Oder r_ verwenden zu helfen, was wahrscheinlich bequemer wäre, wenn wir mehr Zeilen aus dem Kopf oder Schwanz wollte:

>>> x[np.r_[0:2, -2:0]] 
array([[1, 2], 
     [3, 4], 
     [7, 8], 
     [9, 0]]) 
+0

Danke für Ihre Antwort! Ich fand, dass 'np.vstack ((x [0: 2,:], x [-2:,:]))' noch schneller ist. Ich kann nicht wirklich verstehen, warum, aber Ihre Lösung ist definitiv eleganter. – Mattijn

+1

Wenn die Leistung ein Problem darstellt, sollten Sie 'np.concatenate ([x [: 2], x [-2:]])' ebenfalls versuchen, um zu sehen, wie es funktioniert. – DSM

2

Alternativ Sie kann Indizes verwenden, um zu entfernen als

mask = np.ones(len(x), dtype=np.bool) 
mask[2:3] = False # that you want to remove 
y = x[mask] 
Verwandte Themen