I really like how Julia handles arrays.
Numpy arrays on the other hand are awkward to use in custom algorithms because once the memory is reserved, you can't grow the array at either end.
Btw. you can grow them using hstack and vstack although I am not sure how efficient that is.
edit: if anyone knows a solution to this, please let me know...
The amortized complexity is θ(1), but individual insertions might take O(n) time.
It means that it is not hard to have the same in numpy, with the same performance, the only difference is that the growing have to be done manually and that the push_back function has to be called as something like
x, x_len = push_back(x, x_len, 10)
with push_back being defined like def push_back(x, x_len, value):
if len(x) == x_len:
x = np.concatenate((x, np.empty(max(len(x), 1)))
x[x_len] = value
return x, x_len + 1
so that the x variable is supposed to be updated after each insertion.