在 Python 中创建大型数组 [关闭]

Posted

技术标签:

【中文标题】在 Python 中创建大型数组 [关闭]【英文标题】:Creating large arrays in Python [closed] 【发布时间】:2015-08-24 17:21:54 【问题描述】:

我希望在 python 中填充一个 900 乘以 38 的数组。每一行对应一个特定的轮廓,每一列对应这个轮廓的一个特征。我正在寻找遍历每个轮廓,并计算轮廓的区域属性,但我还没有找到最有效的方法。

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

我见过的每个示例都输入了一个数组数据,但我想计算一个值,然后将其粘贴到一个数组中。

我的代码的基础知识如下。创建一个 34,200 个元素长的一维数组,然后再对其进行整形是我的最佳选择吗?

      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

所以我希望在循环遍历每个轮廓时保存诸如面积、周长等值。

【问题讨论】:

这看起来像是您可能正在寻找的答案:***.com/questions/869778/… @Fappycow:不,OP 询问 numpy 数组,所以这里的列表肯定是错误的...... 为什么要搁置?如果您将“最佳方式”改写为“最有效”,那么这根本就不是基于意见的了。此外,对于没有经验的 numpy 用户来说,答案并不明显。 【参考方案1】:

一种选择是创建一个包含所有值的列表,将其设为一个 numpy 数组,然后重新调整数组的形状。例如,如果您有三个轮廓,每个轮廓有三个数据点:

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

这可以让您避免嵌套循环,但如果您的数据集足够大,您可能需要考虑更快的选项。

【讨论】:

以上是关于在 Python 中创建大型数组 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在对象中创建一个具有不同数组元素的新数组[关闭]

在javascript中创建对象数组以获得所需的结果[关闭]

如何在 Python 中创建文本文件寻呼机? [关闭]

如何在python中创建给定结构的元组[关闭]

如何使用python在Mac云驱动器中创建文件[关闭]

映射多个列表以在python中创建(键,值)对[关闭]