Numpy - add row to array

后端 未结 10 1358
难免孤独
难免孤独 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:23

    If no calculations are necessary after every row, it's much quicker to add rows in python, then convert to numpy. Here are timing tests using python 3.6 vs. numpy 1.14, adding 100 rows, one at a time:

    import numpy as np 
    from time import perf_counter, sleep
    
    def time_it():
        # Compare performance of two methods for adding rows to numpy array
        py_array = [[0, 1, 2], [0, 2, 0]]
        py_row = [4, 5, 6]
        numpy_array = np.array(py_array)
        numpy_row = np.array([4,5,6])
        n_loops = 100
    
        start_clock = perf_counter()
        for count in range(0, n_loops):
           numpy_array = np.vstack([numpy_array, numpy_row]) # 5.8 micros
        duration = perf_counter() - start_clock
        print('numpy 1.14 takes {:.3f} micros per row'.format(duration * 1e6 / n_loops))
    
        start_clock = perf_counter()
        for count in range(0, n_loops):
            py_array.append(py_row) # .15 micros
        numpy_array = np.array(py_array) # 43.9 micros       
        duration = perf_counter() - start_clock
        print('python 3.6 takes {:.3f} micros per row'.format(duration * 1e6 / n_loops))
        sleep(15)
    
    #time_it() prints:
    
    numpy 1.14 takes 5.971 micros per row
    python 3.6 takes 0.694 micros per row
    

    So, the simple solution to the original question, from seven years ago, is to use vstack() to add a new row after converting the row to a numpy array. But a more realistic solution should consider vstack's poor performance under those circumstances. If you don't need to run data analysis on the array after every addition, it is better to buffer the new rows to a python list of rows (a list of lists, really), and add them as a group to the numpy array using vstack() before doing any data analysis.

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

    well u can do this :

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

    You can use numpy.append() to append a row to numpty array and reshape to a matrix later on.

    import numpy as np
    a = np.array([1,2])
    a = np.append(a, [3,4])
    print a
    # [1,2,3,4]
    # in your example
    A = [1,2]
    for row in X:
        A = np.append(A, row)
    
    0 讨论(0)
  • 2020-11-27 11:31
    import numpy as np
    array_ = np.array([[1,2,3]])
    add_row = np.array([[4,5,6]])
    
    array_ = np.concatenate((array_, add_row), axis=0)
    
    0 讨论(0)
  • 2020-11-27 11:35

    As this question is been 7 years before, in the latest version which I am using is numpy version 1.13, and python3, I am doing the same thing with adding a row to a matrix, remember to put a double bracket to the second argument, otherwise, it will raise dimension error.

    In here I am adding on matrix A

    1 2 3
    4 5 6
    

    with a row

    7 8 9
    

    same usage in np.r_

    A= [[1, 2, 3], [4, 5, 6]]
    np.append(A, [[7, 8, 9]], axis=0)
    
        >> array([[1, 2, 3],
                  [4, 5, 6],
                  [7, 8, 9]])
    #or 
    np.r_[A,[[7,8,9]]]
    

    Just to someone's intersted, if you would like to add a column,

    array = np.c_[A,np.zeros(#A's row size)]

    following what we did before on matrix A, adding a column to it

    np.c_[A, [2,8]]
    
    >> array([[1, 2, 3, 2],
              [4, 5, 6, 8]])
    
    0 讨论(0)
  • 2020-11-27 11:38

    I use numpy.insert(arr, i, the_object_to_be_added, axis) in order to insert object_to_be_added at the i'th row(axis=0) or column(axis=1)

    import numpy as np
    
    a = np.array([[1, 2, 3], [5, 4, 6]])
    # array([[1, 2, 3],
    #        [5, 4, 6]])
    
    np.insert(a, 1, [55, 66], axis=1)
    # array([[ 1, 55,  2,  3],
    #        [ 5, 66,  4,  6]])
    
    np.insert(a, 2, [50, 60, 70], axis=0)
    # array([[ 1,  2,  3],
    #        [ 5,  4,  6],
    #        [50, 60, 70]])
    

    Too old discussion, but I hope it helps someone.

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