在 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 中创建大型数组 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章