首页 > 解决方案 > 为什么 reshape(4,2) 不同于 reshape(2,-1).T 对于 2x2x2 矩阵

问题描述

我尝试了以下代码段

a = np.array([[[1, 2], [3, 4]],[[5, 6], [7, 8]]])
b = a.reshape(2,-1).T
c = a.reshape(4,2)

我认为 b 和 c 将是相同的,因为 a 正在重塑为 4x2 矩阵。但他们不是。这是b和c

[[1 5]
 [2 6]
 [3 7]
 [4 8]]

[[1 2]
 [3 4]
 [5 6]
 [7 8]]

为什么安排发生了变化?

标签: pythonnumpy

解决方案


它与您正在执行的操作有关。

>>> a = np.array([[[1, 2], [3, 4]],[[5, 6], [7, 8]]])
>>> a
array([[[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]]])

这得到了你想要的 4,2 形状

>>> a.reshape(4,2)
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])

这将为您提供 2 行和 4 列

>>> a.reshape(2,-1)
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

应用 .T 运算符将您的行切换到列:

>>> a.reshape(2,-1).T
array([[1, 5],
       [2, 6],
       [3, 7],
       [4, 8]])

要使用 -1 作为维度重塑为 4、2 数组,它需要位于第一个位置以实现 4、2 数组:

>>> a.reshape(-1,2)
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])

推荐阅读