How to make a 2d numpy array a 3d array?

后端 未结 8 1659
小鲜肉
小鲜肉 2020-12-08 02:24

I have a 2d array with shape (x, y) which I want to convert to a 3d array with shape (x, y, 1). Is there a nice Pythonic way to do this?

相关标签:
8条回答
  • 2020-12-08 03:09

    hope this funtion helps u to convert 2D array to 3D array.

    Args:
      x: 2darray, (n_time, n_in)
      agg_num: int, number of frames to concatenate. 
      hop: int, number of hop frames. 
    
    Returns:
      3darray, (n_blocks, agg_num, n_in)
    
    
    def d_2d_to_3d(x, agg_num, hop):
    
        # Pad to at least one block. 
        len_x, n_in = x.shape
        if (len_x < agg_num): #not in get_matrix_data
            x = np.concatenate((x, np.zeros((agg_num - len_x, n_in))))
    
        # main 2d to 3d. 
        len_x = len(x)
        i1 = 0
        x3d = []
        while (i1 + agg_num <= len_x):
            x3d.append(x[i1 : i1 + agg_num])
            i1 += hop
    
        return np.array(x3d)
    
    0 讨论(0)
  • 2020-12-08 03:16
    numpy.reshape(array, array.shape + (1,))
    
    0 讨论(0)
  • 2020-12-08 03:18

    You can do this with reshape

    For example, you have an array A of shape 35 x 750 (two dimensions), you can change the shape to 35 x 25 x 30 (three dimensions) with A.reshape(35, 25, 30)

    More in the documentation here

    0 讨论(0)
  • 2020-12-08 03:23
    import numpy as np
    
    # create a 2D array
    a = np.array([[1,2,3], [4,5,6], [1,2,3], [4,5,6],[1,2,3], [4,5,6],[1,2,3], [4,5,6]])
    
    print(a.shape) 
    # shape of a = (8,3)
    
    b = np.reshape(a, (8, 3, -1)) 
    # changing the shape, -1 means any number which is suitable
    
    print(b.shape) 
    # size of b = (8,3,1)
    
    0 讨论(0)
  • 2020-12-08 03:24
    import numpy as np
    
    a= np.eye(3)
    print a.shape
    b = a.reshape(3,3,1)
    print b.shape
    
    0 讨论(0)
  • 2020-12-08 03:27

    In addition to the other answers, you can also use slicing with numpy.newaxis:

    >>> from numpy import zeros, newaxis
    >>> a = zeros((6, 8))
    >>> a.shape
    (6, 8)
    >>> b = a[:, :, newaxis]
    >>> b.shape
    (6, 8, 1)
    

    Or even this (which will work with an arbitrary number of dimensions):

    >>> b = a[..., newaxis]
    >>> b.shape
    (6, 8, 1)
    
    0 讨论(0)
提交回复
热议问题