Python重塑数组



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

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]]]

我希望它是这样的…其中第一个数组在左上角,下一个数组在右上方,第三个在左下角,第四个在右下角。我的实际示例在原始数组中有四个以上的2x2s…我只是想做一个简单的例子。

我已经试过了:

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]]])

不要通过1:

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

你描述的是你想把你最里面的大小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只做底部两个维度的2-D的事情。但是,您可以看到这个重塑中的组织。

有两个轴被改变。你必须用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]]]

您可以使用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]])

相关内容

  • 没有找到相关文章

最新更新