How to add an extra column to a NumPy array
np.r_[ ... ]
and np.c_[ ... ]
are useful alternatives to vstack
and hstack
,with square brackets [] instead of round ().
A couple of examples:
: import numpy as np: N = 3: A = np.eye(N): np.c_[ A, np.ones(N) ] # add a columnarray([[ 1., 0., 0., 1.], [ 0., 1., 0., 1.], [ 0., 0., 1., 1.]]): np.c_[ np.ones(N), A, np.ones(N) ] # or twoarray([[ 1., 1., 0., 0., 1.], [ 1., 0., 1., 0., 1.], [ 1., 0., 0., 1., 1.]]): np.r_[ A, [A[1]] ] # add a rowarray([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.], [ 0., 1., 0.]]): # not np.r_[ A, A[1] ]: np.r_[ A[0], 1, 2, 3, A[1] ] # mix vecs and scalars array([ 1., 0., 0., 1., 2., 3., 0., 1., 0.]): np.r_[ A[0], [1, 2, 3], A[1] ] # lists array([ 1., 0., 0., 1., 2., 3., 0., 1., 0.]): np.r_[ A[0], (1, 2, 3), A[1] ] # tuples array([ 1., 0., 0., 1., 2., 3., 0., 1., 0.]): np.r_[ A[0], 1:4, A[1] ] # same, 1:4 == arange(1,4) == 1,2,3 array([ 1., 0., 0., 1., 2., 3., 0., 1., 0.])
(The reason for square brackets [] instead of round ()is that Python expands e.g. 1:4 in square --the wonders of overloading.)
I think a more straightforward solution and faster to boot is to do the following:
import numpy as npN = 10a = np.random.rand(N,N)b = np.zeros((N,N+1))b[:,:-1] = a
And timings:
In [23]: N = 10In [24]: a = np.random.rand(N,N)In [25]: %timeit b = np.hstack((a,np.zeros((a.shape[0],1))))10000 loops, best of 3: 19.6 us per loopIn [27]: %timeit b = np.zeros((a.shape[0],a.shape[1]+1)); b[:,:-1] = a100000 loops, best of 3: 5.62 us per loop