我有以下4个矩阵:
>>> a
array([[0., 0.],
[0., 0.]])
>>> b
array([[1., 1.],
[1., 1.]])
>>> c
array([[2., 2.],
[2., 2.]])
>>> d
array([[3., 3.],
[3., 3.]])
我正在创建另一个包含它们的矩阵:
>>> e = np.array([[a,b], [c,d]])
>>> e.shape
(2, 2, 2, 2)
我想“取消层次结构”并将
e
重塑为 4x4 矩阵,如下所示:
0 0 1 1
0 0 1 1
2 2 3 3
2 2 3 3
但是,当我运行
e.reshape((4,4))
时,我得到以下矩阵:
>>> e.reshape((4,4))
array([[0., 0., 0., 0.],
[1., 1., 1., 1.],
[2., 2., 2., 2.],
[3., 3., 3., 3.]])
有没有办法通过取消层次结构将我的
(2,2,2,2)
矩阵重塑为 (4,4)
矩阵,而不是通过我当前获得的索引?
是的,你可以使用 numpy 的
.concatenate
函数来做到这一点:
np.concatenate(np.concatenate(e, axis=1), axis=1)
您将得到以下矩阵:
array([[0., 0., 1., 1.],
[0., 0., 1., 1.],
[2., 2., 3., 3.],
[2., 2., 3., 3.]])
尝试
np.block([[a,b],[c,d]])
这会水平连接内部列表,并进行垂直堆叠。
或者,您可以交换
e
的 2 个轴,然后重塑。
In [41]: np.block([[a,b],[c,d]])
Out[41]:
array([[0., 0., 1., 1.],
[0., 0., 1., 1.],
[2., 2., 3., 3.],
[2., 2., 3., 3.]])
In [45]: e.transpose(0,2,1,3).reshape(4,4)
Out[45]:
array([[0., 0., 1., 1.],
[0., 0., 1., 1.],
[2., 2., 3., 3.],
[2., 2., 3., 3.]])
block
相当于:
In [47]: np.vstack([np.hstack([a,b]),np.hstack([c,d])])
Out[47]:
array([[0., 0., 1., 1.],
[0., 0., 1., 1.],
[2., 2., 3., 3.],
[2., 2., 3., 3.]])