I think that is some kind of feature. Numpy tries hard to guarantee efficient access to its ndarrays and this is simpler to implement using fixed arrays and mostly you know your bounds at initialization time anyway.
Btw. you can grow them using hstack and vstack although I am not sure how efficient that is.
Growing with vstack or hstack is very slow.
I have seen code where a big csv with time series data is parsed line by line the corresponding numpy array was grown using vstack for each row. worst case: quadratic runtime
Btw. you can grow them using hstack and vstack although I am not sure how efficient that is.