Python Numpy:按最后一个维度的堆栈数组

Python Numpy:按最后一个维度的堆栈数组,python,numpy,multidimensional-array,Python,Numpy,Multidimensional Array,假设我有3个相同形状的numpy数组a,b,c,比如 a.shape == b.shape == c.shape == (7,9) 现在我想创建一个大小为(7,9,3)的三维数组,比如x,这样 x[:,:,0] == a x[:,:,1] == b x[:,:,2] == c 什么是“蟒蛇式”的方法(也许是一行) 提前谢谢 有一个函数正是这样做的:(“d”表示“深度”)。例如: In [10]: import numpy as np In [11]: a = np.ones((7, 9))

假设我有3个相同形状的numpy数组
a
b
c
,比如

a.shape == b.shape == c.shape == (7,9)
现在我想创建一个大小为
(7,9,3)
的三维数组,比如
x
,这样

x[:,:,0] == a
x[:,:,1] == b
x[:,:,2] == c
什么是“蟒蛇式”的方法(也许是一行)


提前谢谢

有一个函数正是这样做的:(“d”表示“深度”)。例如:

In [10]: import numpy as np

In [11]: a = np.ones((7, 9))

In [12]: b = a * 2

In [13]: c = a * 3

In [15]: x = np.dstack((a, b, c))

In [16]: x.shape
Out[16]: (7, 9, 3)

In [17]: (x[:, :, 0] == a).all()
Out[17]: True

In [18]: (x[:, :, 1] == b).all()
Out[18]: True

In [19]: (x[:, :, 2] == c).all()
Out[19]: True

TL;医生:

使用
numpy.stack
(),它沿着您选择的新轴连接一系列数组


尽管@NPE answer非常好,涵盖了许多情况,但在某些情况下,
numpy.dstack
不是正确的选择(我在尝试使用它时才发现这一点)。这是因为
numpy.dstack
,根据:

按深度顺序堆叠阵列(沿第三轴)

这相当于沿二维后的第三个轴进行连接 形状为(M,N)的阵列已被重塑为(M,N,1)和1-D的阵列 形状(N,)已被重塑为(1,N,1)

让我们看一个不需要此函数的示例。假设您有一个包含512 numpy shape
(3,3,3)
数组的列表,并希望将它们堆叠起来以获得一个新的shape
(3,3,3,512)
数组。在我的例子中,这512个数组是2D卷积层的过滤器。如果使用
numpy.dstack

>>> len(arrays_list)
512
>>> arrays_list[0].shape
(3, 3, 3)
>>> numpy.dstack(arrays_list).shape
(3, 3, 1536)
这是因为
numpy.dstack
总是沿着第三个轴堆叠数组!或者,您应该使用
numpy.stack
(),它沿着您选择的新轴连接一系列数组:

>>> numpy.stack(arrays_list, axis=-1).shape
(3, 3, 3, 512)

在我的例子中,我将-1传递给
参数,因为我希望数组沿最后一个轴堆叠。

同样的问题,尝试了np.tile和np.repeat。两者都不起作用。