Код, данный Patol75, быстрый, если массив и n оба малы (хотя его нужно изменить, чтобы он работал для любого значения n).
def f(array,n):
return sum([[x + i for i in range(n+1)] for x in array],[])
Это медленно, когда массив ип оба большие. В этом случае это мой лучший снимок.
def g(array,n):
temp = np.vstack([array+i for i in range(n+1)])
return np.hstack([temp[:,i] for i in range(len(array))])
Вот время.
Для небольшого размера.
array = np.array([1, 8, 38, 17])
n = 2
%timeit f(array,n)
9.44 µs ± 547 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit g(array,n)
23.4 µs ± 1.65 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
Для большего размера.
array = np.random.randint(0,1000,1000)
n = 100
%timeit f(array,n)
479 ms ± 46.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit g(array,n)
2.69 ms ± 62.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)