2009-11-13 41 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