From the np.insert documentation:
Returns
out : ndarray
A copy of `arr` with `values` inserted. Note that `insert`
does not occur in-place: a new array is returned.
You can do the same with concatenate, joining the new value to the main value. hstack, append etc use concatenate; insert is more general, allowing insertion in the middle (for any axis), so it does its own indexing and new array creation.
In any case, the key point is that it does not operate in-place. You can't change the size of an array.
In [788]: x= np.array([0.30153836, 0.30376881, 0.29115761, 0.29074261, 0.28
...: 676876])
In [789]: y=np.insert(x,0,-1,axis=0)
In [790]: y
Out[790]:
array([-1. , 0.30153836, 0.30376881, 0.29115761, 0.29074261,
0.28676876])
In [791]: x
Out[791]: array([ 0.30153836, 0.30376881, 0.29115761, 0.29074261, 0.28676876])
Same action with concatenate; note that I had to add [], short for np.array([-1]), so both inputs are 1d arrays. Expanding the scalar to array is all that insert is doing special.
In [793]: np.concatenate([[-1],x])
Out[793]:
array([-1. , 0.30153836, 0.30376881, 0.29115761, 0.29074261,
0.28676876])