2015-12-09 9 views
11

Я хотел бы выбрать несколько несмежных диапазонов из массива 1d numpy (или вектора).Индекс нескольких, несмежных диапазонов в numpy

Пусть:

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

Это работает, конечно:

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

И это работает, чтобы получать с помощью индивидуальных индексов:

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

Но что, если я хочу, чтобы выбрать диапазоны 0:3, и 7:?

Я пробовал:

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

Есть простой способ сделать это, или мне нужно создать их по отдельности и конкатенации?

ответ

15

Вам необходимо конкатенацию до или после индексирования. np.r_ позволяет легко

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_ расширяет ломтики и сцепляет их.

Вы можете смешать кусочки и списки:

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

Конкатенации перед индексированием, вероятно, быстрее, чем после, но для 1d массива, как это, я не думаю, что разница существенна.

Смежные вопросы