Оптимизировать минимальную операцию над списком списков Python - PullRequest
0 голосов
/ 19 июня 2019

У меня есть список списка, где каждый список соответствует граничной точке фигуры. Я должен извлечь список из четырех точек, каждая из которых определяет вмещающий прямоугольник фигур. Например, у меня есть этот список

[[[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.

1 Ответ

1 голос
/ 19 июня 2019

Вы можете использовать понимание, если хотите (все еще цикл + безобразный):

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]]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...