在Python中创建大型数组

时间:2015-06-09 18:12:32

标签: python arrays list for-loop

我希望在python中填充一个900-some by 38数组。每行对应于特定轮廓,每列对应于该轮廓的特征。我想要遍历每个轮廓,并计算轮廓的区域属性,但我还没有想出最有效的方法。

我考虑过创建一个列表并为每个轮廓追加每个列值,然后尝试将所有这些列表叠加在一起,但在我看来,我不想让列表与内置函数,然后尝试使用numpy来创建数组。我甚至不确定数据结构是否兼容。

我见过的每个例子都提供了数组数据,但我想计算一个值,然后将其粘贴在一个数组中。

我的代码的基础知识如下。创建一个34D00元素的一维数组,然后重塑它是我的最佳选择吗?

      cs = find_contours(Image)
      print len(cs)
      for c in cs:

        Area          = moments['m00']
        features.append(Area)
        Perimeter     = cv2.arcLength(c,True)
    # bounding box: x,y,width,height
        BoundingBox   = cv2.boundingRect(c)
    # centroid    = m10/m00, m01/m00 (x,y)
        Centroid      = ( moments['m10']/moments['m00'],moments['m01']/moments['m00'] )

    # EquivDiameter: diameter of circle with same area as region
        EquivDiameter = ny.sqrt(4*Area/ny.pi)
        features.append(EquivDiameter)
    # Extent: ratio of area of region to area of bounding box
        Extent        = Area/(BoundingBox[2]*BoundingBox[3])


    # CONVEX HULL stuff
    # convex hull vertices
        ConvexHull    = cv2.convexHull(c)
        ConvexArea    = cv2.contourArea(ConvexHull)

    # Solidity := Area/ConvexArea
        Solidity      = Area/ConvexArea

因此,当我循环浏览时,我希望为每个轮廓保存区域,周长等值。

1 个答案:

答案 0 :(得分:0)

一个选项是创建所有值的单个列表,使其成为一个numpy数组,然后重新整形数组。例如,如果您有三个轮廓,每个轮廓有三个数据点:

l = []
for i in range(9):
    l.append(calculated value)
l = np.asarray(l)
l.reshape(3,3)

这允许您避免嵌套循环,但如果数据集足够大,则可能需要查看更快的选项。