Python 重塑数组

问题描述

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

x = np.array([[[-3,0],[0,0]],[[0,-3]],[[2,[[-3,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,-3],[2,[-3,0]]])

预期:

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

解决方法

不要传递1

>>> x.reshape(4,4)

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

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

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

如果你想渲染它,你需要编写自己的 __repr__ 函数:numpy 只为底部的两个做二维的事情方面。 但是,您可以看到这次重塑中的组织。

,

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

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

输出

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

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

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

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

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

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

输出:

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