Numpy имеет функцию repeat , которая повторяет каждый элемент массива заданный (на) элемент несколько раз.
Я хочу реализовать функцию, которая выполняет аналогичные функции, но повторяет не отдельные элементы, а блоки различного размера из последовательных элементов. По сути, я хочу следующую функцию:
import numpy as np
def repeat_blocks(a, sizes, repeats):
b = []
start = 0
for i, size in enumerate(sizes):
end = start + size
b.extend([a[start:end]] * repeats[i])
start = end
return np.concatenate(b)
Например, учитывая
a = np.arange(20)
sizes = np.array([3, 5, 2, 6, 4])
repeats = np.array([2, 3, 2, 1, 3])
1011 * тогда *
repeat_blocks(a, sizes, repeats)
возвращает
array([ 0, 1, 2,
0, 1, 2,
3, 4, 5, 6, 7,
3, 4, 5, 6, 7,
3, 4, 5, 6, 7,
8, 9,
8, 9,
10, 11, 12, 13, 14, 15,
16, 17, 18, 19,
16, 17, 18, 19,
16, 17, 18, 19 ])
Я хочу запихнуть эти петли во имя исполнения. Это возможно? Если да, то как?