让我们从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
)
答案 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数组的大小是无效的