在多维空间中将多个子矩阵重塑/组合为一个矩阵

2024-03-29

我有一个大小为 (2, 2, 4, 2, 2) 的 5D 二进制数组 'a'。结构如下所示,例如:

a[0,0]:
[[[ 0.  1.]
  [ 0.  0.]]

 [[ 0.  0.]
  [ 0.  1.]]

 [[ 0.  0.]
  [ 0.  1.]]

 [[ 0.  0.]
  [ 1.  0.]]]

我想要做的是创建一个 (2,2,4,4) 矩阵,将最后两个轴的 2x2 矩阵组合在一起,但采用平方结构。

结果应该是这样的:

result[0,0]:
[[0. 1. 0. 0.]
 [0. 0. 0. 1.]
 [0. 0. 0. 0.]
 [0. 1. 1. 0.]]

我希望这已经足够清楚了。如果我将原始矩阵的括号放在结果中,它看起来像这样:

result[0,0]:
[[[0. 1. [0. 0.]
 [0. 0.] 0. 1.]]
 [[0. 0. [0. 0.]
 [0. 1.] 1. 0.]]]

看来您正在将第三个轴从 (4) 分解为 (2,2) 并将分割轴的前半部分带到倒数第二个轴位置。因此,有两种方法可以实现这样的输出:np.reshape http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.reshape.html and np.transpose http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.transpose.html,就像这样-

out = a.reshape(2,2,2,2,2,2).transpose(0,1,3,4,2,5).reshape(2,2,4,4)

out = a.reshape(2,2,2,-1,2).transpose(0,1,3,2,4).reshape(2,2,4,4)

样本运行 -

In [69]: a[0][0]
Out[69]: 
array([[[49, 91],
        [10, 32]],

       [[71, 27],
        [50, 64]],

       [[ 9, 41],
        [73, 52]],

       [[54, 85],
        [53, 36]]])

In [70]: out1 = a.reshape(2,2,2,2,2,2).transpose(0,1,3,4,2,5).reshape(2,2,4,4)

In [71]: out2 = a.reshape(2,2,2,-1,2).transpose(0,1,3,2,4).reshape(2,2,4,4)

In [72]: out1[0][0]
Out[72]: 
array([[49, 91,  9, 41],
       [10, 32, 73, 52],
       [71, 27, 54, 85],
       [50, 64, 53, 36]])

In [73]: out2[0][0]
Out[73]: 
array([[49, 91,  9, 41],
       [10, 32, 73, 52],
       [71, 27, 54, 85],
       [50, 64, 53, 36]])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在多维空间中将多个子矩阵重塑/组合为一个矩阵 的相关文章

随机推荐