2017-04-09 76 views
4

我有兩個Numpy陣列labelsmore_labels。在一種情況下,兩個陣列都是1D,在另一種情況下具有形狀(m,)和(n,),兩個陣列都是2D的,具有形狀(m,k)和(n,k)。我想合併它們,以便在1D情況下得到的陣列具有形狀(m + n),或者在2D情況下具有(m + n,k)的形狀。堆棧Numpy陣列無附加檢查

目前我不必分別處理兩種情況,像這樣:

if(labels.ndim > 1): 
    numpy.vstack(labels,more_labels) 
else 
    numpy.hstack(labels,more_labels) 

有沒有一種方法numpy的處理兩種情況在一起嗎?

+1

注意'vstack'和'hstack'使用'concatenate';他們有不同的指定軸的方法,並且可以調整尺寸的數量。它們用Python編碼,可以用'np.source(np.hstack)'來讀取。 – hpaulj

回答

3

您需要np.concatenate()才能將您的陣列沿給定的軸加入。在這種情況下,因爲你想加入他們沿着第一軸你可以用它設置爲0。

numpy.concatenate((a1, a2, ...), axis=0)

默認axis參數沿着現有的軸加入陣列 的序列。

下面是一個例子:

n [18]: a = np.array([1,2, 3]) 

In [19]: b = np.array([0,0, 3]) 

In [20]: np.hstack((a, b)) 
Out[20]: array([1, 2, 3, 0, 0, 3]) 

In [21]: np.concatenate((a, b)) 
Out[21]: array([1, 2, 3, 0, 0, 3]) 

In [22]: a = np.array([[1],[2], [3]]) 

In [23]: b = np.array([[0],[0], [3]]) 

In [24]: np.vstack((a, b)) 
Out[24]: 
array([[1], 
     [2], 
     [3], 
     [0], 
     [0], 
     [3]]) 

In [25]: np.concatenate((a, b)) 
Out[25]: 
array([[1], 
     [2], 
     [3], 
     [0], 
     [0], 
     [3]])