initialize a numpy array

前端 未结 12 1593
情歌与酒
情歌与酒 2020-11-28 02:55

Is there way to initialize a numpy array of a shape and add to it? I will explain what I need with a list example. If I want to create a list of objects generated in a loop,

相关标签:
12条回答
  • 2020-11-28 03:35

    numpy.fromiter() is what you are looking for:

    big_array = numpy.fromiter(xrange(5), dtype="int")
    

    It also works with generator expressions, e.g.:

    big_array = numpy.fromiter( (i*(i+1)/2 for i in xrange(5)), dtype="int" )
    

    If you know the length of the array in advance, you can specify it with an optional 'count' argument.

    0 讨论(0)
  • 2020-11-28 03:35

    I realize that this is a bit late, but I did not notice any of the other answers mentioning indexing into the empty array:

    big_array = numpy.empty(10, 4)
    for i in range(5):
        array_i = numpy.random.random(2, 4)
        big_array[2 * i:2 * (i + 1), :] = array_i
    

    This way, you preallocate the entire result array with numpy.empty and fill in the rows as you go using indexed assignment.

    It is perfectly safe to preallocate with empty instead of zeros in the example you gave since you are guaranteeing that the entire array will be filled with the chunks you generate.

    0 讨论(0)
  • 2020-11-28 03:35

    I'd suggest defining shape first. Then iterate over it to insert values.

    big_array= np.zeros(shape = ( 6, 2 ))
    for it in range(6):
        big_array[it] = (it,it) # For example
    
    >>>big_array
    
    array([[ 0.,  0.],
           [ 1.,  1.],
           [ 2.,  2.],
           [ 3.,  3.],
           [ 4.,  4.],
           [ 5.,  5.]])
    
    0 讨论(0)
  • 2020-11-28 03:37

    numpy.zeros

    Return a new array of given shape and type, filled with zeros.

    or

    numpy.ones

    Return a new array of given shape and type, filled with ones.

    or

    numpy.empty

    Return a new array of given shape and type, without initializing entries.


    However, the mentality in which we construct an array by appending elements to a list is not much used in numpy, because it's less efficient (numpy datatypes are much closer to the underlying C arrays). Instead, you should preallocate the array to the size that you need it to be, and then fill in the rows. You can use numpy.append if you must, though.

    0 讨论(0)
  • 2020-11-28 03:37

    You do want to avoid explicit loops as much as possible when doing array computing, as that reduces the speed gain from that form of computing. There are multiple ways to initialize a numpy array. If you want it filled with zeros, do as katrielalex said:

    big_array = numpy.zeros((10,4))

    EDIT: What sort of sequence is it you're making? You should check out the different numpy functions that create arrays, like numpy.linspace(start, stop, size) (equally spaced number), or numpy.arange(start, stop, inc). Where possible, these functions will make arrays substantially faster than doing the same work in explicit loops

    0 讨论(0)
  • 2020-11-28 03:46

    To initialize a numpy array with a specific matrix:

    import numpy as np
    
    mat = np.array([[1, 1, 0, 0, 0],
                    [0, 1, 0, 0, 1],
                    [1, 0, 0, 1, 1],
                    [0, 0, 0, 0, 0],
                    [1, 0, 1, 0, 1]])
    
    print mat.shape
    print mat
    

    output:

    (5, 5)
    [[1 1 0 0 0]
     [0 1 0 0 1]
     [1 0 0 1 1]
     [0 0 0 0 0]
     [1 0 1 0 1]]
    
    0 讨论(0)
提交回复
热议问题