2016-12-03 299 views

回答

4

你試過np.array

np.array([[1,2],[3,4]]) 

使得2D陣列通過連接2個維數組(列表)

同樣

np.array([np.ones(3,3), np.zeros(3,3)]] 

應產生一個(2,3,3)陣列。

新功能np.stack功能可讓您更好地控制添加的軸。它通過將所有輸入數組的維度擴大一個並連接起來。

您可以自己擴展尺寸,例如

In [378]: A=np.ones((2,3),int) 
In [379]: B=np.zeros((2,3),int) 
In [380]: np.concatenate([A[None,:,:], B[None,:,:]], axis=0) 
Out[380]: 
array([[[1, 1, 1], 
     [1, 1, 1]], 

     [[0, 0, 0], 
     [0, 0, 0]]]) 
In [381]: _.shape 
Out[381]: (2, 2, 3) 

關鍵的東西理解是:

  • 匹配的輸入尺寸 - 他們必須匹配所有但被加入

  • 擴大投入的尺寸尺寸如所須。要連接2D陣列以形成3D,2D必須首先展開爲3D。那Nonenp.newaxis訣竅特別有價值。

  • 沿右軸連接。

stackhstackvstack等都推動這項工作,而是一種技能numpy的用戶應該能夠直接與concatenate工作。在交互式會話中練習小樣本。

In [385]: np.array((A,B)).shape 
Out[385]: (2, 2, 3) 
In [386]: np.stack((A,B)).shape 
Out[386]: (2, 2, 3) 
In [387]: np.stack((A,B),axis=1).shape 
Out[387]: (2, 2, 3) 
In [388]: np.stack((A,B),axis=2).shape 
Out[388]: (2, 3, 2) 

如果陣列形狀不同,將np.array創建一個對象D型細胞陣列

In [389]: C=np.ones((3,3)) 
In [390]: np.array((A,C)) 
Out[390]: 
array([array([[1, 1, 1], 
     [1, 1, 1]]), 
     array([[ 1., 1., 1.], 
     [ 1., 1., 1.], 
     [ 1., 1., 1.]])], dtype=object) 
In [391]: _.shape 
Out[391]: (2,) 

dstack(和stack)將具有不同大小的陣列問題:

In [392]: np.dstack((A,B,C)) 
.... 
ValueError: all the input array dimensions except for the concatenation axis must match exactly 
+0

我已經嘗試了'np.array()',但是它返回了一個形狀爲'(n,)'的numpy數組,而其中的每個元素都是另一個numpy數組。 – xxx222

+0

然後你的'n'陣列的形狀必須不同。它正在創建一個對象數組。你陣列的形狀是什麼?我不明白'dstack'會如何工作。 – hpaulj

+0

我當時並沒有意識到它!我終於發現我的一些numpy數組的大小不一樣。非常感謝您的回答! – xxx222