Вот один из способов сделать это, используя списки.
Объяснение: Вы перебираете комбинацию из двух списков (coords
и ids
), поскольку они отображают один в один.i[0]
дает вам индекс, а j.flatten()
преобразует каждый массив вашего coords
в один 1d массив.Задача состоит в том, чтобы создать пары координат в виде кортежей.Для этого сначала вы получаете все четные индексированные элементы, начиная с 0, с шагом 2, используя [0::2]
, и каждый нечетный индексированный элемент, начиная с 1, с шагом 2, используя [1::2]
.Используя zip, вы объединяете их в пары, а затем, наконец, используете list
, чтобы преобразовать их в список []
.
Наконец, вы сортируете список final
, используя идентификатор (первый элемент) в качестве ключа.
# Sample data (Just taken for example purpose)
coords = [np.array([[[1, 2],
[2,1],
[3,2],
[4,4]]]),
np.array([[[3,2],
[1,2],
[1,4],
[5,6]]]),
np.array([[[12,2],
[1,21],
[1,14],
[15,6]]])]
ids = [[310],
[181],[123]]
Код
final = [[i[0], list(zip(j.flatten()[0::2], j.flatten()[1::2]))] for i, j in zip(ids, coords)]
result = sorted(final, key=lambda x: x[0])
print (result)
Выход
[[123, [(12, 2), (1, 21), (1, 14), (15, 6)]],
[181, [(3, 2), (1, 2), (1, 4), (5, 6)]],
[310, [(1, 2), (2, 1), (3, 2), (4, 4)]]]