Prepend element to numpy array
I have the following numpy array
import numpy as np
X = np.array([[5.], [4.], [3.], [2.], [1.]])
I want to insert [6.]
at the beginning.
I've tried:
X = X.insert(X, 0)
how do I insert into X?
Solution 1:
numpy has an insert
function that's accesible via np.insert
with documentation.
You'll want to use it in this case like so:
X = np.insert(X, 0, 6., axis=0)
the first argument X
specifies the object to be inserted into.
The second argument 0
specifies where.
The third argument 6.
specifies what is to be inserted.
The fourth argument axis=0
specifies that the insertion should happen at position 0
for every column. We could've chosen rows but your X is a columns vector, so I figured we'd stay consistent.
Solution 2:
I just wrote some code that does this operation ~100,000 times, so I needed to figure out the fastest way to do this. I'm not an expert in code efficiency by any means, but I could figure some things out by using the %%timeit
magic function in a jupyter notebook.
My findings:
np.concatenate(([number],array))
requires the least time. Let's call it 1x time.
np.asarray([number] + list(array))
comes in at ~2x.
np.r_[number,array]
is ~4x.
np.insert(array,0,number)
appears to be the worst option here at 8x.
I have no idea how this changes with the size of array
(I used a shape (15,) array) and most of the options I suggested only work if you want to put the number at the beginning. However, since that's what the question is asking about, I figure this is a good place to make these comparisons.
Solution 3:
You can try the following
X = np.append(arr = np.array([[6]]), values = X, axis= 0)
Instead of inserting 6 to the existing X, let append 6 by X.
So, first argument arr
is numpy array of scalar 6, second argument is your array to be added, and third is the place where we want to add
Solution 4:
I know this is a fairly old one, but a short solution is using numpy slicing tricks:
np.r_[[[6.]], X]
If you need to do it in a second dimension you can use np.c_.
I think this is the least cluttered version I can think of