# Python: Add a column to numpy 2d array

## Python: Add a column to numpy 2d array

Let me just throw in a very simple example with much smaller size. The principle should be the same.

``````a = np.zeros((6,2))
array([[ 0.,  0.],
[ 0.,  0.],
[ 0.,  0.],
[ 0.,  0.],
[ 0.,  0.],
[ 0.,  0.]])
b = np.ones((6,1))
array([[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.]])

np.hstack((a,b))
array([[ 0.,  0.,  1.],
[ 0.,  0.,  1.],
[ 0.,  0.,  1.],
[ 0.,  0.,  1.],
[ 0.,  0.,  1.],
[ 0.,  0.,  1.]])
``````

Using numpy index trick to append a 1D vector to a 2D array

``````a = np.zeros((6,2))
# array([[ 0.,  0.],
#        [ 0.,  0.],
#        [ 0.,  0.],
#        [ 0.,  0.],
#        [ 0.,  0.],
#        [ 0.,  0.]])
b = np.ones(6) # or np.ones((6,1))
#array([1., 1., 1., 1., 1., 1.])
np.c_[a,b]
# array([[0., 0., 1.],
#        [0., 0., 1.],
#        [0., 0., 1.],
#        [0., 0., 1.],
#        [0., 0., 1.],
#        [0., 0., 1.]])
``````

#### Python: Add a column to numpy 2d array

Under cover all the `stack` variants (including `append` and `insert`) end up doing a `concatenate`. They just precede it with some sort of array reshape.

``````In [60]: A = np.arange(12).reshape(3,4)

In [61]: np.concatenate([A, np.ones((A.shape[0],1),dtype=A.dtype)], axis=1)
Out[61]:
array([[ 0,  1,  2,  3,  1],
[ 4,  5,  6,  7,  1],
[ 8,  9, 10, 11,  1]])
``````

Here I made a (3,1) array of 1s, to match the (3,4) array. If I wanted to add a new row, Id make a (1,4) array.

While the variations are handy, if you are learning, you should become familiar with `concatenate` and the various ways of constructing arrays that match in number of dimensions and necessary shapes.