Вы заявили, что «в качестве альтернативы вы можете сказать, что у меня есть список начальных позиций и длин окон», который не соответствует вашему массиву примеров.
Если start
обозначает начало, а end
- это длина , вы можете получить свои элементы следующим образом:
>>> [i for iter in [range(s,s+e) for s,e in zip(start,end)] for i in iter]
[1, 2, 3, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44]
Если вы хотите сопоставить ваш пример массива, а end
действительно является конечным элементом -1 , вы можете получить свои элементы следующим образом:
>>> [i for iter in [range(*t) for t in zip(start,end)] for i in iter]
[1, 2, 7, 8, 9, 20, 21, 22, 23, 24]
>>> somearray=np.array(_)
>>> somearray
array([1, 2, 7, 8, 9, 20, 21, 22, 23, 24])
Альтернатива:
>>> sum([range(*t) for t in zip(start,end)],[])
[1, 2, 7, 8, 9, 20, 21, 22, 23, 24]
Имейте в виду, что вы просто генерируете список целых чисел, описанных в ваших кортежах как индекс вашего массива numpy. Любой из них может использовать xrange
против range
, если в вашем случае это быстрее / лучше .