优化python列表上的最小操作

2024-04-29 09:52:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表,每个列表对应于一个图形的边界点。我必须提取一个由四个点组成的列表,每个点定义了图形的封闭矩形。例如,我有这个清单

[[[2,5],[3,4],[5,8],[5,6],[5,9]],
 [[11,14],[12,15],[16,17]],
 ...
]

在这里,每个列表定义了一个地物边界。我要得到的是四个点的列表

[[min_x, min_y], [min_x, max_y], [max_x, max_y], [max_x, min_y]]

[[[2,4],[2,9],[5,9],[5,4]],
 [[11,14], [11, 17], [16,17], [16,14]]
 ...
]

我已经使用python循环完成了这项工作,它非常有效。 这是密码。你知道吗

cleaned_contours = list()
for cur_cont in contours:
    min_x, min_y = cur_cont.min(axis=0).flatten()
    max_x, max_y = cur_cont.max(axis=0).flatten()

    cleaned_contours.append(np.array([[min_x, min_y], [min_x, max_y], [max_x, max_y], [max_x, min_y]]))

有没有一种方法我可以做到这一点,而不使用循环或列表理解。 我在用Python3。你知道吗


Tags: 图形列表定义minmax边界矩形cur
1条回答
网友
1楼 · 发布于 2024-04-29 09:52:05

如果你喜欢,你可以使用理解(仍然是循环+丑陋):

a = [[[2,5],[3,4],[5,8],[5,6],[5,9]], [[11,14],[12,15],[16,17]]]

[[[j[0], j[1]], [j[0], j[3]], [j[2], j[3]], [j[2], j[1]]] for j in [np.array(i).min(0).tolist() + np.array(i).max(0).tolist() for i in a]]

#[[[2, 4], [2, 9], [5, 9], [5, 4]],
# [[11, 14], [11, 17], [16, 17], [16, 14]]]

相关问题 更多 >