Python / Numpy - Обернуть фрагмент вокруг конца массива

У меня есть два одномерных массива, один из которых имеет некоторые интересующие значения (a), а другой - индексы в этот массив (b) . Я знаю, что значения в b всегда увеличиваются, за исключением одной точки (может быть где угодно), где число уменьшается, поскольку оно перемещается от конца к началу массива a. Метод ниже, кажется, работает, но я просто думаю, что должен существовать более чистый способ. Кто-нибудь может предложить что-нибудь получше? Спасибо.

Код:

import numpy as np
a = np.arange(12)
b = np.array([5, 9, 2, 4])
#I want to generate these:
#[5,6,7,8,9]
#[9,10,11,0,1,2]
#[2,3,4]
#[4,5]

a = np.roll(a, -b[0], axis=0)
# Subtract off b[0] but ensure that all values are positive
b = (b-b[0]+len(a))%len(a)
for i, ind in enumerate(b):
   if i < len(b)-1:
      print a[b[i]:b[i+1]+1]
   else:
      print np.hstack((a[b[i]:len(a)], a[0]))
6
задан Scott B 16 April 2011 в 01:32
поделиться