Ao anexar apenas uma vez ou uma vez de vez em quando, usar np.append
em seu array deve ser suficiente. A desvantagem dessa abordagem é que a memória é alocada para um array completamente novo sempre que é chamado. Ao aumentar um array para uma quantidade significativa de amostras, seria melhor pré-alocar o array (se o tamanho total for conhecido) ou anexar a uma lista e converter em um array posteriormente.
Usando 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)
Usando a lista python e convertendo para array posteriormente:
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)
Matriz numpy pré-alocada:
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)
Quando o tamanho final é desconhecido, a pré-alocação é difícil, tentei pré-alocar em blocos de 50, mas não cheguei perto de usar uma lista.
85.1 ms ± 561 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
np.insert([1,2,3], 3, 1)