Numpy数组重塑添加维度。

5

好的,我是一名(非常)初学者的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)

我知道我在reshape命令中添加了一个额外的维度(我认为是第三个数字1),但我不明白这做了什么。形状说明它仍然有2行4列,但显然还有其他改变。再次强调我的动机是要在R中执行相同的操作,但在我确切理解转换的过程之前我会卡住。(如果这是个糟糕的问题,请原谅我,我昨天才开始学Python!)

2个回答

5

使用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

因此,如果您只想向现有矩阵添加新维度,则应执行类似于x[:, np.newaxis, :]的操作(确切用法取决于您想要的输出格式)。


非常有帮助,谢谢。在我的例子中,由于X1的维度为(2,4),而X2的维度为(2,4,1),为什么当我打印它们时,X1显示的是行与行之间并排的单元格,而X2则是一个个单独的单元格呢? - user2498193
1
在二维空间中打印三维数据确实很令人困惑。X2 有三个开放括号,因此您获得的数据沿第三个维度排序,而不是沿行排序。例如,尝试打印 X2[0, 0, :] 以使其更清晰。 - blue_note
好的,谢谢@blue_note - 这真的很有帮助。帮助我找出问题不在这些步骤中,而是后面的数组代数处理方式不同 - 非常感谢! - user2498193

3

添加维度到2D数组有三种不同的方式。

为了理解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]]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接