【问题标题】:reshaping numpy array/matrix重塑numpy数组/矩阵
【发布时间】:2020-10-25 16:24:24
【问题描述】:

我正在尝试重塑以下 numpy 数组。

从此:

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

       [[-1, -2, -3],
        [-2, -3, -4],
        [-3, -4, -5]]], dtype=int64)

到这样的事情:

array([[[ 1,  2,  3],
        [-1, -2, -3]],

       [[ 2,  3,  4],
        [-2, -3, -4]],

       [[ 3,  4,  5],
        [-3, -4, -5]]], dtype=int64)

尝试使用reshape 函数,但这对我不起作用。

谢谢

【问题讨论】:

  • 这不是重塑。这是一个转置。试试arr.transpose(1,0,2)
  • 这能回答你的问题吗? Stacking arrays in numpy

标签: python numpy


【解决方案1】:

只是np.stack 沿轴1:

arr = np.array([[[ 1,  2,  3],
                 [ 2,  3,  4],
                 [ 3,  4,  5]],

                [[-1, -2, -3],
                 [-2, -3, -4],
                 [-3, -4, -5]]])

np.stack(arr, 1)

结果

array([[[ 1,  2,  3],
        [-1, -2, -3]],

       [[ 2,  3,  4],
        [-2, -3, -4]],

       [[ 3,  4,  5],
        [-3, -4, -5]]])

【讨论】:

    【解决方案2】:

    这可行:

    import numpy as np
    
    x = np.array([[[ 1,  2,  3],
                   [ 2,  3,  4],
                   [ 3,  4,  5]],
                  [[-1, -2, -3],
                   [-2, -3, -4],
                   [-3, -4, -5]]], dtype=np.int64)
    
    np.vstack(map(lambda x: [x], zip(*(x))))
    
    array([[[ 1,  2,  3],
            [-1, -2, -3]],
           [[ 2,  3,  4],
            [-2, -3, -4]],
           [[ 3,  4,  5],
            [-3, -4, -5]]], dtype=int64)
    

    【讨论】:

      【解决方案3】:

      您应该可以使用numpy.reshape 函数而不会出现任何错误。

      方法如下:

      a = array([[[ 1,  2,  3],
                  [ 2,  3,  4],
                  [ 3,  4,  5]],
                 [[-1, -2, -3],
                  [-2, -3, -4],
                  [-3, -4, -5]]], dtype=int64)
      
      a = a.reshape(3, 2, 3)
      

      这是数组“a”将被转换成的内容:

      array([[[ 1  2  3]
              [ 2  3  4]]
      
             [[ 3  4  5]
              [-1 -2 -3]]
      
             [[-2 -3 -4]
              [-3 -4 -5]]])
      

      【讨论】:

        【解决方案4】:

        这不是重塑问题。这是转置任务 - 重新排序轴:

        In [293]: arr.transpose(1,0,2)                                                          
        Out[293]: 
        array([[[ 1,  2,  3],
                [-1, -2, -3]],
        
               [[ 2,  3,  4],
                [-2, -3, -4]],
        
               [[ 3,  4,  5],
                [-3, -4, -5]]])
        

        stack 通过在第一个维度上迭代并在新的中间轴上连接来工作。 transpose 只是做一个view 所以会更快。

        【讨论】:

          猜你喜欢
          • 2022-01-17
          • 1970-01-01
          • 2021-10-05
          • 2023-01-25
          • 2021-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多