Numpy - add row to array

后端 未结 10 1359
难免孤独
难免孤独 2020-11-27 10:59

How does one add rows to a numpy array?

I have an array A:

A = array([[0, 1, 2], [0, 2, 0]])

I wish to add rows to this array from

相关标签:
10条回答
  • 2020-11-27 11:39

    What is X? If it is a 2D-array, how can you then compare its row to a number: i < 3?

    EDIT after OP's comment:

    A = array([[0, 1, 2], [0, 2, 0]])
    X = array([[0, 1, 2], [1, 2, 0], [2, 1, 2], [3, 2, 0]])
    

    add to A all rows from X where the first element < 3:

    import numpy as np
    A = np.vstack((A, X[X[:,0] < 3]))
    
    # returns: 
    array([[0, 1, 2],
           [0, 2, 0],
           [0, 1, 2],
           [1, 2, 0],
           [2, 1, 2]])
    
    0 讨论(0)
  • 2020-11-27 11:46

    If you can do the construction in a single operation, then something like the vstack-with-fancy-indexing answer is a fine approach. But if your condition is more complicated or your rows come in on the fly, you may want to grow the array. In fact the numpythonic way to do something like this - dynamically grow an array - is to dynamically grow a list:

    A = np.array([[1,2,3],[4,5,6]])
    Alist = [r for r in A]
    for i in range(100):
        newrow = np.arange(3)+i
        if i%5:
            Alist.append(newrow)
    A = np.array(Alist)
    del Alist
    

    Lists are highly optimized for this kind of access pattern; you don't have convenient numpy multidimensional indexing while in list form, but for as long as you're appending it's hard to do better than a list of row arrays.

    0 讨论(0)
  • 2020-11-27 11:47

    You can also do this:

    newrow = [1,2,3]
    A = numpy.concatenate((A,newrow))
    
    0 讨论(0)
  • 2020-11-27 11:47

    I use 'np.vstack' which is faster, EX:

    import numpy as np
    
    input_array=np.array([1,2,3])
    new_row= np.array([4,5,6])
    
    new_array=np.vstack([input_array, new_row])
    
    0 讨论(0)
提交回复
热议问题