Учитывая 1D ndarray и целое число, каков наиболее эффективный способ создать этот ndarray? - PullRequest
0 голосов
/ 03 ноября 2019

Дано array и n генерировать x

Ввод

array = [1 8 38 17]
n = 2

x = [1 2 3 8 9 10 38 39 40 17 18 19]

Ответы [ 2 ]

2 голосов
/ 03 ноября 2019

Код, данный 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)
0 голосов
/ 03 ноября 2019
array = [1, 8, 38, 17]
n = 2
sum([[x, x + n - 1, x + n] for x in array], [])
# [1, 2, 3, 8, 9, 10, 38, 39, 40, 17, 18, 19]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...