代码之家  ›  专栏  ›  技术社区  ›  Kermit

Numpy将“2D多列”重塑为“2D单列的3D”

  •  2
  • Kermit  · 技术社区  · 5 年前

    一些sklearn编码器不接受许多列的2D数组。


    lzt_int = [1, 2, 3, 4, 5, 6]
    d1_int = np.array(lzt_int)
    d2_int_multi = d2_int.reshape(int(d2_int.shape[0]/3), 3)
    

    多列二维数组

    >>> d2_int_multi
    
    array([[1, 2, 3],
           [4, 5, 6]])
    

    想要高效地转换成一个由二维单列组成的三维数组,就像这样。

    array([
        [[1],
         [4]],
    
        [[2],
         [5]],
    
        [[3],
         [6]],
    ])
    

    转换尝试

    >>> d2_int_multi.reshape(3, 2, 1, order='C')
    
    array([[[1],
            [2]],
    
           [[3],
            [4]],
    
           [[5],
            [6]]])
    
    >>> d2_int_multi.reshape(3, 2, 1, order='F')
    
    array([[[1],
            [5]],
    
           [[4],
            [3]],
    
           [[2],
            [6]]])
    
    >>> d2_int_multi.reshape(3, 2, 1, order='A')
    
    array([[[1],
            [2]],
    
           [[3],
            [4]],
    
           [[5],
            [6]]])
    

    为了节省内存,我不希望访问每一列,在将其添加到三维数组之前,先将其设置为二维数组。

    1 回复  |  直到 5 年前
        1
  •  2
  •   mandulaj    5 年前

    您需要添加一个额外的轴,然后转置结果。您可以使用此行执行这些操作:

    d2_int_multi[None].T