2017-04-09 103 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]])