numpy 数组重塑添加维度

numpy array reshape adding dimension

好吧,我是一个(非常)新手 Python 用户,但我正在尝试将一段 Python 代码翻译成 R,但我 运行 遇到了一个令人困惑的问题与数组重塑。

让我们制作一些示例数据:

X1 = np.array([[-0.047, -0.113, 0.155, 0.001],
        [0.039, 0.254, 0.054, 0.201]], dtype=float)

In:X1
Out:
array([[-0.047, -0.113, 0.155, 0.001],
        [0.039, 0.254, 0.054, 0.201]])
In:X1.shape
Out: (2,4)

好的,我制作了一个 2 行 4 列的二维数组。我对此很满意。这行代码引起了混淆:

X2 = X1.reshape((2, -1, 1))

In: X2
Out:
array([[[-0.047],
        [-0.113],
         [0.155],
         [0.001]],

         [0.039],
         [0.254],
         [0.054],
         [0.201]]])

In: X2.shape
Out: (2, 4, 1)

所以我知道我添加了一个额外的维度(我认为这是重塑命令中的第 3 个数字 1),但我不明白这还做了什么。形状暗示它仍然有 2 行和 4 列,但显然其他东西发生了变化。我在这里的动机再次是在 R 中执行相同的操作,但直到我知道我明白我在这里转换的内容之前,我被困住了。 (如果这是一个可怕的问题,请原谅我 Python 昨天才开始!)

reshape(2, -1, 1) 你不仅添加了新维度。你说过

* the 1st dimension should be of size 2
* the 3rd dimension should be of size 1
* the 2nd should be whatever remains

所以,唯一有效的选项是 4。如果您只想向现有矩阵添加一个新维度,您应该执行类似 x[:, np.newaxis, :] 的操作(具体用法取决于您希望输出格式是)

有 3 种不同的方法可以向二维数组添加维度。

您应该尝试不同的组合来理解 reshape 的用法。尝试以下操作:

import numpy as np

X1 = np.array([[-0.047, -0.113, 0.155, 0.001],
        [0.039, 0.254, 0.054, 0.201]], dtype=float)

X2 = X1.reshape((1, 2, -1))
print(X2)

>[[[-0.047 -0.113  0.155  0.001]
   [ 0.039  0.254  0.054  0.201]]]

X3 = X1.reshape((-1, 1, 2))
print(X3)

>[[[-0.047 -0.113]]
  [[ 0.155  0.001]]
  [[ 0.039  0.254]]
  [[ 0.054  0.201]]]