2016-02-04 54 views
0

我使用OpenCV中生成的轮廓,看起来像这样:如何连接2 np.ndarray的?

array([[[227, 762]], 

     [[228, 762]], 

     [[229, 763]], 

     [[228, 764]], 

     [[229, 765]], 

     [[228, 766]], 

     [[227, 766]], 

     [[228, 766]], 

     [[229, 765]], 

     [[228, 764]], 

     [[229, 763]], 

     [[229, 762]]], dtype=int32) 

这个轮廓已键入np.ndarray

当我检查cnt.shape,我获得(12,1,2),这表明这比简单的12×2矩阵更复杂。

这意味着,当我尝试:

In [104]: new = np.array([1,2]) 

In [105]: type(new) 
Out[105]: numpy.ndarray 

In [106]: X = np.vstack((ex,new)) 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-106-5ceb3fcd9619> in <module>() 
----> 1 X = np.vstack((ex,new)) 

/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/core/shape_base.pyc in vstack(tup) 
    226 
    227  """ 
--> 228  return _nx.concatenate([atleast_2d(_m) for _m in tup], 0) 
    229 
    230 def hstack(tup): 

ValueError: all the input arrays must have same number of dimensions 

你可以看到,新的和前都是同一类型的,我是希望他们都具有2列,因此我可以垂直堆叠起来,但唉,不......我该怎么做?

+0

您可以轻松将示例中的第一个数组转换为12x2矩阵:arr.reshape(12,2)'是否对您有帮助? – mgc

回答

1

要将其转换为12X2,简单地说:

yourarray.reshape(12, 2) 

这让我:

array([[227, 762], 
     [228, 762], 
     [229, 763], 
     [228, 764], 
     [229, 765], 
     [228, 766], 
     [227, 766], 
     [228, 766], 
     [229, 765], 
     [228, 764], 
     [229, 763], 
     [229, 762]]) 

我推荐的numpy的的array方法的简要通读 - 有很多潜在的有用的东西。