Numpy 将矩阵层次结构转换为串联

问题描述 投票:0回答:2

我有以下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)
矩阵,而不是通过我当前获得的索引?

python numpy reshape
2个回答
2
投票

是的,你可以使用 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.]])

1
投票

尝试

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.]])
© www.soinside.com 2019 - 2024. All rights reserved.