При добавлении только один раз или один раз время от времени использование np.appendв вашем массиве должно быть нормальным. Недостатком этого подхода является то, что память выделяется для совершенно нового массива каждый раз, когда он вызывается. При увеличении массива для значительного количества выборок было бы лучше либо предварительно выделить массив (если известен общий размер), либо добавить в список и преобразовать в массив впоследствии.
Использование np.append:
b = np.array([0])
for k in range(int(10e4)):
b = np.append(b, k)
1.2 s ± 16.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Используя преобразование списка Python в массив после этого:
d = [0]
for k in range(int(10e4)):
d.append(k)
f = np.array(d)
13.5 ms ± 277 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Предварительное выделение массива numpy:
e = np.zeros((n,))
for k in range(n):
e[k] = k
9.92 ms ± 752 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Когда окончательный размер неизвестен, предварительное выделение ресурсов затруднено, я пробовал предварительно выделить блоки по 50, но это не приблизилось к использованию списка.
85.1 ms ± 561 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
np.insert([1,2,3], 3, 1)