【问题标题】:Flatten all subarrays in an array展平数组中的所有子数组
【发布时间】:2021-10-04 00:46:02
【问题描述】:

我有一个 numpy 数组 X,其形状为 (2 , 2 , 3),如下所示:

X = [[[1 , 2 , 3 ] 
       [4 , 5 , 6]] , 
     
      [[7 , 8 , 9 ] 
       [10, 11, 12 ]],

我想展平所有子数组并将 X 变成 (2 , 6) 的形状,表示如下:

X = [[ 1 , 2 , 3 , 4, 5 , 6 ] ,
     [ 7 , 8 , 9 , 10, 11 , 12 ] ]

但是当我使用X.flatten()时,结果却是这样的:

X = [ 1 , 2, 3, 4 , 5, ... , 12]

是否有任何函数可以帮助我按照我的意思转换数组。

【问题讨论】:

    标签: python numpy flatten


    【解决方案1】:

    reshape....

    import numpy as np
    
    arr = np.array([[[1 , 2 , 3 ],
           [4 , 5 , 6]],
           [[7 , 8 , 9 ],
           [10, 11, 12 ]]])
    
    
    arr.reshape(2, 6)
    

    结果:

    array([[ 1,  2,  3,  4,  5,  6],
           [ 7,  8,  9, 10, 11, 12]])
    

    【讨论】:

      【解决方案2】:

      遍历数组并展平子列表

      arr = np.array([x.flatten() for x in X])
      

      或者对于 numpy 解决方案,您也可以使用 np.hstack()

      arr = np.hstack(X)
      

      输出

      print(arr)
      #[[ 1  2  3  4  5  6]
      # [ 7  8  9 10 11 12]]
      

      【讨论】:

      • 是的,我知道,但是我要求一个可以立即执行它而无需遍历所有子数组的模块。
      【解决方案3】:

      遍历数组并展平子组件:

      x = np.array([[[1,2],[3,4]], [[5,6],[7,8]]])
      y = np.array([i.flatten() for i in x])
      print(x)
      print(y)
      

      [[[1 2]
        [3 4]]
      
       [[5 6]
        [7 8]]]
      
      [[1 2 3 4]
       [5 6 7 8]]
      

      【讨论】:

        【解决方案4】:

        如果它是一个 numpy 数组,你可以使用 reshape

        x.reshape(2,6)
        

        输入:

        x = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]
        x.reshape(2,6)
        

        输出:

        array([[ 1,  2,  3,  4,  5,  6],
           [ 7,  8,  9, 10, 11, 12]])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-07-20
          • 1970-01-01
          • 1970-01-01
          • 2017-01-14
          • 2022-01-25
          相关资源
          最近更新 更多