如何将2d numpy数组制作成3d数组?

nob*_*ody 32 python numpy multidimensional-array

我有一个带有形状(x,y)的二维数组,我想将其转换为具有形状(x,y,1)的3d数组.有没有一个很好的Pythonic方法来做到这一点?

Mar*_*son 55

除了其他答案,您还可以使用切片numpy.newaxis:

>>> from numpy import zeros, newaxis
>>> a = zeros((6, 8))
>>> a.shape
(6, 8)
>>> b = a[:, :, newaxis]
>>> b.shape
(6, 8, 1)
Run Code Online (Sandbox Code Playgroud)

甚至这个(它将使用任意数量的维度):

>>> b = a[..., newaxis]
>>> b.shape
(6, 8, 1)
Run Code Online (Sandbox Code Playgroud)

  • 另外,`numpy.newaxis`只是'None`.`newaxis`是"只是"的可读性.它等同于`b = a [...,None]`(省略号也允许它适用于N维数组,而不仅仅是2D数组.) (10认同)
  • 真正.出于某种原因,我的印象是`newaxis`为`None`只是一个实现细节(因此可能会在将来发生变化),但它看起来像是明确记录的. (2认同)
  • @Gathide:这取决于.您的旧数组中包含"6*8 = 48"数字.新的有'6*8*3 = 144`数字.您想如何将原始的48个数字映射到新阵列中?沿第三轴重复?在这种情况下,大多数情况下你不需要重复:把它留作形状`(6,8,1)`并利用NumPy的广播能力.但如果你真的需要形状`(6,8,3)`,请查看`np.tile`和`np.broadcast_to`. (2认同)

Win*_*ert 10

numpy.reshape(array, array.shape + (1,))
Run Code Online (Sandbox Code Playgroud)

  • 如果你很乐意在适当的位置修改`A`,你可以简单地指定shape属性:`A.shape = A.shape +(1,)`,甚至`A.shape + = 1,`. (5认同)

小智 5

import numpy as np

# create a 2D array
a = np.array([[1,2,3], [4,5,6], [1,2,3], [4,5,6],[1,2,3], [4,5,6],[1,2,3], [4,5,6]])

print(a.shape) 
# shape of a = (8,3)

b = np.reshape(a, (8, 3, -1)) 
# changing the shape, -1 means any number which is suitable

print(b.shape) 
# size of b = (8,3,1)
Run Code Online (Sandbox Code Playgroud)