使用numpy从许多2D数组构建3D数组

时间:2017-04-12 07:59:39

标签: python arrays numpy

让我们从2个2D阵列开始:

import numpy as np
a = np.zeros( (3,4) )
b = np.zeros( (3,4) )

现在让我们将它们组合成一个3D数组:

c = np.stack( (a,b) )

到目前为止一切都很好,但是如何向3D阵列添加额外的2D阵列,以下是行不通的:

np.stack( (c,a) )

所以,我的问题是如何在3D阵列中添加额外的图层? (numpy版本1.12.1

3 个答案:

答案 0 :(得分:4)

如果你在开始时就知道所有的2D数组,那么你可以叠加两个以上的数组:

import numpy as np
a = np.zeros((3, 4))
b = np.zeros((3, 4))
c = np.stack((a, b, a))

如果您已经有一个“堆叠”数组并希望向其添加另一个数组,则可以使用例如numpy.concatenate

如果要添加的数组是“平面”,则必须将其包装在列表中以使尺寸匹配。默认情况下,数组沿第一维连接(就像在关键字参数中指定axis=0一样):

>>> c.shape
(2, 3, 4)
>>> np.array([a]).shape
(1, 3, 4)

c = np.concatenate((c, [a]))

如果两个阵列都已经“堆叠”,这也可以起作用:

c = np.concatenate((c, c))

答案 1 :(得分:2)

您可以在要添加的数组的开头添加None/np.newaxis的新轴:a[None,:,:]或仅a[None,...]或仅a[None]并用于堆叠使用{{ 1}}。

这是一个让事情变得清晰的示例 -

np.vstack

<强>工作流

因此,工作流程将是:

1)要从In [14]: c.shape Out[14]: (2, 3, 4) In [15]: d = np.vstack((c,a[None])) In [16]: d.shape Out[16]: (3, 3, 4) In [17]: e = np.vstack((d,a[None])) In [18]: e.shape Out[18]: (4, 3, 4) 数组开始,请为数组使用新轴:

2D

2)对于后续的附加步骤,对传入的c = np.vstack( (a[None],b[None]) ) 数组使用新轴,并使用2D与现有的np.vstack数组堆叠 -

3D

使用d = np.vstack((c,a[None])) 提高效果

当我们需要沿着第一个轴堆叠时,引擎盖下的

np.concatenate使用np.vstack作为特例。因此,如果我们想要出于性能原因而使用np.concatenate来避免额外的函数调用开销,我们需要指定连接轴,它将是第一个轴。

因此,np.concatenate -

np.concatenate

答案 2 :(得分:1)

首先使 a c 相同的维度 1 string;string 2 string;string;string
但是,与列表不同,改变numpy数组的大小是无效的