Adding numpy to arrays is very inefficient. This is due to the fact that the interpreter needs to find and assign memory for the entire array at each step. Depending on the application, there are much more effective strategies.
If you know the length in advance, it is best to pre-allocate the array using a function such as np.ones , np.zeros , or np.empty .
desired_length = 500 results = np.empty(desired_length) for i in range(desired_length): results[i] = i**2
If you don't know the length, it might be more efficient to store the results in a regular list and then convert them to an array.
results = [] while condition: a = do_stuff() results.append(a) results = np.array(results)
Below are some timings on my computer.
def pre_allocate(): results = np.empty(5000) for i in range(5000): results[i] = i**2 return results def list_append(): results = [] for i in range(5000): results.append(i**2) return np.array(results) def numpy_append(): results = np.array([]) for i in range(5000): np.append(results, i**2) return results %timeit pre_allocate()
So, you can see that both the preliminary selection and the use of the list, the conversion is much faster.
source share