Python: Add a column to numpy 2d array

后端 未结 5 1252
醉酒成梦
醉酒成梦 2021-01-02 04:44

I have a 60000 by 200 numpy array. I want to make it 60000 by 201 by adding a column of 1\'s to the right. (so every row is [prev, 1]) Concatenate with axis = 1 doesn\'t wor

相关标签:
5条回答
  • 2021-01-02 05:19

    The first thing to think about is that numpy arrays are really not meant to change size. So you should ask yourself, can you create your original matrix as 60k x 201 and then fill the last column afterwards. This is usually best.

    If you really must do this, see How to add column to numpy array

    0 讨论(0)
  • 2021-01-02 05:23

    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.]])
    
    0 讨论(0)
  • 2021-01-02 05:25

    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.]])
    
    0 讨论(0)
  • 2021-01-02 05:29

    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, I'd 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.

    0 讨论(0)
  • 2021-01-02 05:40

    I think the numpy method column_stack is more interesting because you do not need to create a column numpy array to stack it in the matrix of interest. With the column_stack you just need to create a normal numpy array.

    0 讨论(0)
提交回复
热议问题