# [python] How to add items into a numpy array

I need to accomplish the following task:

from:

``````a = array([[1,3,4],[1,2,3]...[1,2,1]])
``````

(add one element to each row) to:

``````a = array([[1,3,4,x],[1,2,3,x]...[1,2,1,x]])
``````

I have tried doing stuff like a[n] = array([1,3,4,x])

but numpy complained of shape mismatch. I tried iterating through `a` and appending element x to each item, but the changes are not reflected.

Any ideas on how I can accomplish this?

This question is related to `python` `numpy`

``````target = []

for line in a.tolist():
new_line = line.append(X)
target.append(new_line)

return array(target)
``````

If `x` is just a single scalar value, you could try something like this to ensure the correct shape of the array that is being appended/concatenated to the rightmost column of `a`:

``````import numpy as np
a = np.array([[1,3,4],[1,2,3],[1,2,1]])
x = 10
b = np.hstack((a,x*np.ones((a.shape[0],1))))
``````

returns `b` as:

``````array([[  1.,   3.,   4.,  10.],
[  1.,   2.,   3.,  10.],
[  1.,   2.,   1.,  10.]])
``````

``````import numpy as np
a = np.array([[1,3,4],[1,2,3],[1,2,1]])
b = np.array([10,20,30])
c = np.hstack((a, np.atleast_2d(b).T))
``````

returns `c`:

``````array([[ 1,  3,  4, 10],
[ 1,  2,  3, 20],
[ 1,  2,  1, 30]])
``````

Appending a single scalar could be done a bit easier as already shown (and also without converting to float) by expanding the scalar to a python-list-type:

``````import numpy as np
a = np.array([[1,3,4],[1,2,3],[1,2,1]])
x = 10

b = np.hstack ((a, [[x]] * len (a) ))
``````

returns `b` as:

``````array([[ 1,  3,  4, 10],
[ 1,  2,  3, 10],
[ 1,  2,  1, 10]])
``````

Appending a row could be done by:

``````c = np.vstack ((a, [x] * len (a[0]) ))
``````

returns `c` as:

``````array([[ 1,  3,  4],
[ 1,  2,  3],
[ 1,  2,  1],
[10, 10, 10]])
``````

np.insert can also be used for the purpose

``````import numpy as np
a = np.array([[1, 3, 4],
[1, 2, 3],
[1, 2, 1]])
x = 5
index = 3 # the position for x to be inserted before
np.insert(a, index, x, axis=1)
``````
``````array([[1, 3, 4, 5],
[1, 2, 3, 5],
[1, 2, 1, 5]])
``````

`index` can also be a `list`/`tuple`

``````>>> index = [1, 1, 3] # equivalently (1, 1, 3)
>>> np.insert(a, index, x, axis=1)
array([[1, 5, 5, 3, 4, 5],
[1, 5, 5, 2, 3, 5],
[1, 5, 5, 2, 1, 5]])
``````

or a `slice`

``````>>> index = slice(0, 3)
>>> np.insert(a, index, x, axis=1)
array([[5, 1, 5, 3, 5, 4],
[5, 1, 5, 2, 5, 3],
[5, 1, 5, 2, 5, 1]])
``````

One way to do it (may not be the best) is to create another array with the new elements and do column_stack. i.e.

``````>>>a = array([[1,3,4],[1,2,3]...[1,2,1]])
[[1 3 4]
[1 2 3]
[1 2 1]]

>>>b = array([1,2,3])
>>>column_stack((a,b))
array([[1, 3, 4, 1],
[1, 2, 3, 2],
[1, 2, 1, 3]])
``````