Numpy - Попробуйте разбить массив в соответствии с монотонным условием c - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть массив numpy, представляющий собой последовательность (x, y) координат. Я пытаюсь разделить его в соответствии с монотонным c условием. Чтобы проиллюстрировать это:

cords = np.array([[1,1],[2,3],[2,4],[2,5],[4,3],[4,5],[4,6],[4,7],[5,7],[5,5]])

Я хотел бы разбить массив и убедиться, что для каждого подмассива x однообразно c (появиться один раз). Результаты должны быть:

cord1 = np.array([[1,1],[2,3],[4,3],[5,7])
cord2 = np.array([[2,4],[4,5],[5,5])
cord3 = np.array([[2,5],[4,6]])
cord4 = np.array([[4,7]])

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 13 февраля 2020

Вам придется делать это итеративно, постепенно извлекая монотонные c координаты из оставшейся части вашего массива:

import numpy as np

cords = np.array([[1,1],[2,3],[2,4],[2,5],[4,3],[4,5],[4,6],[4,7],[5,7],[5,5]])

result = []
while cords.size>0:
    mask = np.insert(cords[:-1,0] != cords[1:,0],0,[True])
    result.append(cords[mask,:])
    cords = cords[mask==False,:]

Вывод:

for mono in result: print(list(map(list,mono)))

[[1, 1], [2, 3], [4, 3], [5, 7]]
[[2, 4], [4, 5], [5, 5]]
[[2, 5], [4, 6]]
[[4, 7]]

примечание: предполагается, что точки расположены в порядке их координаты х. Вам нужно будет отсортировать их заранее, если это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...