问题描述
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]]]