Add single element to array in numpy

I have a numpy array containing:

[1, 2, 3] 

I want to create an array containing:

[1, 2, 3, 1] 

That is, I want to add the first element on to the end of the array.

I have tried the obvious:

np.concatenate((a, a[0])) 

But I get an error saying ValueError: arrays must have same number of dimensions

I don't understand this - the arrays are both just 1d arrays.

1

9 Answers

append() creates a new array which can be the old array with the appended element.

I think it's more normal to use the proper method for adding an element:

a = numpy.append(a, a[0]) 
4

When appending only once or once every now and again, using np.append on your array should be fine. The drawback of this approach is that memory is allocated for a completely new array every time it is called. When growing an array for a significant amount of samples it would be better to either pre-allocate the array (if the total size is known) or to append to a list and convert to an array afterward.

Using np.append:

b = np.array([0]) for k in range(int(10e4)): b = np.append(b, k) 1.2 s ± 16.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) 

Using python list converting to array afterward:

d = [0] for k in range(int(10e4)): d.append(k) f = np.array(d) 13.5 ms ± 277 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) 

Pre-allocating numpy array:

e = np.zeros((n,)) for k in range(n): e[k] = k 9.92 ms ± 752 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) 

When the final size is unkown pre-allocating is difficult, I tried pre-allocating in chunks of 50 but it did not come close to using a list.

85.1 ms ± 561 µs per loop (mean ± std. dev. of 7 runs, 10 loops each) 

Try this:

np.concatenate((a, np.array([a[0]]))) 

concatenate needs both elements to be numpy arrays; however, a[0] is not an array. That is why it does not work.

1

a[0] isn't an array, it's the first element of a and therefore has no dimensions.

Try using a[0:1] instead, which will return the first element of a inside a single item array.

This command,

numpy.append(a, a[0]) 

does not alter a array. However, it returns a new modified array. So, if a modification is required, then the following must be used.

a = numpy.append(a, a[0]) 
t = np.array([2, 3]) t = np.append(t, [4]) 

If you want to add an element use append()

a = numpy.append(a, 1) in this case add the 1 at the end of the array

If you want to insert an element use insert()

a = numpy.insert(a, index, 1) in this case you can put the 1 where you desire, using index to set the position in the array.

This might be a bit overkill, but I always use the the np.take function for any wrap-around indexing:

>>> a = np.array([1, 2, 3]) >>> np.take(a, range(0, len(a)+1), mode='wrap') array([1, 2, 3, 1]) >>> np.take(a, range(-1, len(a)+1), mode='wrap') array([3, 1, 2, 3, 1]) 

Let's say a=[1,2,3] and you want it to be [1,2,3,1].

You may use the built-in append function

np.append(a,1) 

Here 1 is an int, it may be a string and it may or may not belong to the elements in the array. Prints: [1,2,3,1]

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like