Вы можете использовать понимание списка:
>>> [a[x[0]:x[-1]+1] for x in b]
[array([9, 8]), array([7, 6, 5]), array([ 3, 2, 1, 0, -1])]
РЕДАКТИРОВАТЬ: Ваш вопрос указывает, что вы хотите более быстрый вариант, поэтому вы можете протестировать следующий скрипт, чтобы увидеть, какой из них быстрее для вашей установки Python:
#!/usr/bin/env python
import timeit
setup = '''
import numpy as np
a = np.array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2])
b = [[0, 1], [2, 3, 4], [6, 7, 8, 9, 10]]
'''
test1 = '''
def test():
return [a[x[0]:x[-1]+1] for x in b]
'''
test2 = '''
def test():
return [a[idx] for idx in b]
'''
print(timeit.timeit(setup = setup,
stmt = test1,
number = 1000000))
print(timeit.timeit(setup = setup,
stmt = test2,
number = 1000000))
На моей машине два подхода, данные вам до сих пор, работают примерно одинаково, но answer hpaulj может быть немного быстрее (если Python не кеширует данные за кулисами), что может быть более полезным Вам в производстве. Проверьте это локально и посмотрите, получите ли вы похожий или другой ответ.