2009-11-13 88 views
10

准备数据以进行NumPy计算。我很好奇的方式来构建:构建现有二维数组中numpy的3d数组

myarray.shape => (2,18,18) 

来自:

d1.shape => (18,18) 
d2.shape => (18,18) 

我尝试使用NumPy的命令:

hstack([[d1],[d2]]) 

,但它看起来不行!

回答

6

hstack和vstack做没有改变阵列的维数:他们只是把他们“肩并肩”。因此,组合二维数组将创建一个新的二维数组(不是3D模型!)。

你可以做什么丹尼尔建议(直接使用numpy.array([d1, d2]))。

您也可以将您的阵列三维阵列堆叠它们,通过添加一个新的层面,每个阵列之前:

d3 = numpy.vstack([ d1[newaxis,...], d2[newaxis,...] ]) # shape = (2, 18, 18) 

事实上,d1[newaxis,...].shape == (1, 18, 18),您可以直接叠加两种3D阵列和获得新3D阵列(d3),你想要的。

+0

:)感谢EOL,现在我将更多地了解vstack,hstack – vernomcrp 2009-11-13 09:35:29

+1

'np.vstack([a [np.newaxis,...],b [np.newaxis,...]])'像魅力一样工作!谢谢。 – thepunitsingh 2017-11-24 14:11:03

21

只是做d3 = array([d1,d2])似乎为我工作:

>>> from numpy import array 
>>> # ... create d1 and d2 ... 
>>> d1.shape 
(18,18) 
>>> d2.shape 
(18,18) 
>>> d3 = array([d1, d2]) 
>>> d3.shape 
(2, 18, 18) 
+0

哦其工作,感谢丹尼尔:) – vernomcrp 2009-11-13 09:29:51

+1

我有一个问题类似。如果我已经得到了具有形状的d3(2,18,18),并且我想在d3中添加另一个二维数组d4(18x18)来制作三维数组(3,18,18)。我该怎么办? – 2015-12-30 03:40:56

+1

您只需'vstack(d3,d4 [np.newaxis,...])',如我的答案。 – EOL 2016-03-25 20:56:51