【问题标题】:How to store a varying size arraylist in a numpy array (for clustering purposes)?如何将不同大小的数组列表存储在 numpy 数组中(用于聚类目的)?
【发布时间】:2018-08-30 06:41:02
【问题描述】:
 a=[]
 for (x,y,w,h) in faces:
    for (ex,ey,ew,eh) in eyes:
               cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
               a.append(eyes)        
               i+=1
 print(a)

eyes 是 detectMultiScale 使用 eye_cascade 的检测输出(检测面部内部,但省略)。

假设 (ex, ey, ew, eh) 是循环的每次迭代都需要存储在数组中的 4 个坐标。

每次迭代的输出如下所示:[54, 46, 90, 103] 但有时,它也看起来像这样:[[20 34 56 41], [34 56 78 89]]

有时 (ex, ey, ew, eh) 的值在一个数组中最多可以是 4 个数组值。

我们如何将这些多维输出存储在一个 numpy 数组中? 它没有固定的大小,有时是4个坐标的数组;有时它是一个由多组 4 个坐标组成的数组。

【问题讨论】:

  • 最佳名单

标签: python numpy opencv multidimensional-array


【解决方案1】:

将它们收集到一个列表中,然后连接:

>>> out = []
>>> for i in range(5):
...     out.append(np.squeeze(np.full([i, 4], i))) # squeeze to make it more difficult
... 
>>> out
[array([], shape=(0, 4), dtype=int64), array([1, 1, 1, 1]), array([[2, 2, 2, 2],
       [2, 2, 2, 2]]), array([[3, 3, 3, 3],
       [3, 3, 3, 3],
       [3, 3, 3, 3]]), array([[4, 4, 4, 4],
       [4, 4, 4, 4],
       [4, 4, 4, 4],
       [4, 4, 4, 4]])]
>>> np.r_[('0,2,1', *out)]
array([[1, 1, 1, 1],
       [2, 2, 2, 2],
       [2, 2, 2, 2],
       [3, 3, 3, 3],
       [3, 3, 3, 3],
       [3, 3, 3, 3],
       [4, 4, 4, 4],
       [4, 4, 4, 4],
       [4, 4, 4, 4],
       [4, 4, 4, 4]])

这里我们使用“魔法”连接符r_;它的第一个参数'0,2,1' 的意思是:沿轴0 连接,使所有内容2D,如果必须添加轴,则预先存在的尺寸从轴1 开始,所以[1, 1, 1, 1] 之前被重塑为[[1, 1, 1, 1]]串联。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    相关资源
    最近更新 更多