Efficient way to add a singleton dimension to a NumPy vector so that slice assignments work

前端 未结 5 879
清歌不尽
清歌不尽 2020-12-11 00:48

In NumPy, how can you efficiently make a 1-D object into a 2-D object where the singleton dimension is inferred from the current object (i.e. a list should go to either a 1x

5条回答
  •  猫巷女王i
    2020-12-11 01:00

    Why not simply add square brackets?

    >> my_list
    [1, 2, 3, 4]
    >>> numpy.asarray([my_list])
    array([[1, 2, 3, 4]])
    >>> numpy.asarray([my_list]).shape
    (1, 4)
    

    .. wait, on second thought, why is your slice assignment failing? It shouldn't:

    >>> my_list = [1,2,3,4]
    >>> d = numpy.ones((3,4))
    >>> d
    array([[ 1.,  1.,  1.,  1.],
           [ 1.,  1.,  1.,  1.],
           [ 1.,  1.,  1.,  1.]])
    >>> d[0,:] = my_list
    >>> d[1,:] = numpy.asarray(my_list)
    >>> d[2,:] = numpy.asarray([my_list])
    >>> d
    array([[ 1.,  2.,  3.,  4.],
           [ 1.,  2.,  3.,  4.],
           [ 1.,  2.,  3.,  4.]])
    

    even:

    >>> d[1,:] = (3*numpy.asarray(my_list)).T
    >>> d
    array([[  1.,   2.,   3.,   4.],
           [  3.,   6.,   9.,  12.],
           [  1.,   2.,   3.,   4.]])
    

提交回复
热议问题