【问题标题】:Python reshaping an arrayPython重塑数组
【发布时间】:2021-05-31 12:59:21
【问题描述】:

这是一个非常具体的问题。我有这个数组:

x = np.array([[[-3, 0], [0, 0]], [[0, 0], [0, -3]], [[2, 0], [0, 0]], [[-3, 0], [0, 0]]])

[[[-3  0]
 [ 0  0]]

 [[ 0  0]
  [ 0 -3]]

 [[2  0]
  [ 0  0]]

 [[-3  0]
  [ 0  0]]]

我希望它是以下.. 其中第一个数组在左上角,下一个数组在右上角,第三个在左下角,第四个在右下角。我的真实示例在原始数组中有四个以上的 2x2... 我只是想做一个更简单的示例。

我试过这个:

x.reshape(1,4,4)

但这会导致:

array([[[-3,  0,  0,  0],
    [ 0,  0,  0, -3],
    [2,  0,  0,  0],
    [-3,  0,  0,  0]]])

预计会这样:

array([[[-3,  0,  0,  0],
    [ 0,  0,  0, -3],
    [2,  0,  -3,  0],
    [0,  0,  0,  0]]])

【问题讨论】:

  • 这没有意义,你的数组中没有2
  • 抱歉我更新了。

标签: python numpy multidimensional-array numpy-ndarray


【解决方案1】:

您可以使用np.block。您必须提供您的“角落”作为列表列表中的元素:

x = np.array([[[-3, 0], [0, 0]], [[0, 0], [0, -3]], [[2, 0], [0, 0]], [[-3, 0], [0, 0]]])
np.block([[x[0], x[1]], [x[2], x[3]]])

输出

array([[-3,  0,  0,  0],
       [ 0,  0,  0, -3],
       [ 2,  0, -3,  0],
       [ 0,  0,  0,  0]])

【讨论】:

    【解决方案2】:

    有两个轴发生了变化。 您必须使用np.moveaxis 更改轴。

    np.moveaxis(array, axis_source, axis_destination):将数组的轴移动到新位置。

    x = np.moveaxis(x, 2,0)
    x = np.reshape(x,(2,2,4))
    x = np.moveaxis(x, 0,1)
    

    以及(如果需要)最终重塑:

    x = np.reshape(x,(1,4,4))
    

    输出:

    [[[-3  0  0  0]
      [ 0  0  0 -3]
      [ 2  0 -3  0]
      [ 0  0  0  0]]]
    

    【讨论】:

      【解决方案3】:

      您描述的是您想将最里面的 4 大小更改为 2x2。因此,您需要的是 2x2 矩阵的 2x2 数组:

      >>> x.reshape(2, 2, 2, 2)
      array([[[[-3,  0],
               [ 0,  0]],
      
              [[ 0,  0],
               [ 0, -3]]],
      
      
             [[[ 2,  0],
               [ 0,  0]],
      
              [[-3,  0],
               [ 0,  0]]]])
      

      如果您想渲染它,您需要编写自己的__repr__ 函数:numpy 只对底部二维进行二维处理。 但是,您可以看到这种重塑中的组织。

      【讨论】:

        【解决方案4】:

        不要通过1:

        >>> x.reshape(4, 4)
        
        array([[-3,  0,  0,  0],
               [ 0,  0,  0, -3],
               [ 2,  0,  0,  0],
               [-3,  0,  0,  0]])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-01-31
          • 2021-06-05
          • 2021-12-31
          • 1970-01-01
          • 2016-02-11
          • 2017-07-22
          相关资源
          最近更新 更多