2015-12-09 11 views
11

Ich möchte mehrere, nicht benachbarte Bereiche aus einem 1d numpy Array (oder Vektor) auswählen.Index mehrere, nicht benachbarte Bereiche in numpy

Angenommen:

>>> idx = np.random.randint(100, size=10) 
array([82, 9, 11, 94, 31, 87, 43, 77, 49, 50]) 

Dies funktioniert, natürlich:

>>> idx[0:3] 
array([82, 9, 11]) 

Und das funktioniert über einzelne Indizes holen:

>>> idx[[0,3,4]] 
array([82, 94, 31]) 

Aber was, wenn ich die wählenden Bereiche 0:3 und 7:?

Ich habe versucht:

>>> idx[[0:3,7:]] 
SyntaxError: invalid syntax 

Gibt es eine einfache Möglichkeit, dies zu tun, oder muss ich sie separat generieren und verketten?

Antwort

15

Sie müssen entweder vor oder nach der Indizierung verketten. np.r_ macht es einfach

In [116]: idx=np.array([82, 9, 11, 94, 31, 87, 43, 77, 49, 50]) 
In [117]: np.r_[0:3,7:10] 
Out[117]: array([0, 1, 2, 7, 8, 9]) 
In [118]: idx[np.r_[0:3,7:10]] 
Out[118]: array([82, 9, 11, 77, 49, 50]) 

np.r_ die Scheiben erweitert und verkettet sie.

Sie können Scheiben und Listen mischen:

In [120]: np.r_[0:3,7:10,[0,3,4]] 
Out[120]: array([0, 1, 2, 7, 8, 9, 0, 3, 4]) 

verketten vor der Indizierung wahrscheinlich schneller als nach, aber für 1D-Array wie diese, ich glaube nicht, der Unterschied signifikant ist.