Удалить дубликаты кортежей в массиве numpy (те, которые находятся рядом друг с другом) - PullRequest
0 голосов
/ 08 июня 2018

Я более или менее новичок в python / numpy, и у меня есть эта проблема:

У меня есть numpy массивы, в которых первый и последний кортежи всегда одинаковы.Между ними иногда бывают дубликаты кортежей (только те, которые находятся рядом друг с другом), от которых я хочу избавиться.Используемая структура скобок должна быть сохранена.

Я уже пробовал np.unique (например, 1 , 2 ), но это меняет мой первоначальный порядок (который должен бытьподдерживается).Мой примерный массив выглядит так:

    myarray = np.array([[[1,1],[1,1],[4,4],[4,4],[2,2],[3,3],[1,1]]])

Мне нужен результат, который выглядит примерно так:

    myarray = np.array([[[1,1],[4,4],[2,2],[3,3],[1,1]]])

Заранее спасибо за вашу поддержку!

1 Ответ

0 голосов
/ 08 июня 2018

Получить однократные смещенные сравнения вдоль второй оси и использовать логическое индексирование для выбора -

myarray[:,np.r_[True,(myarray[0,1:] != myarray[0,:-1]).any(-1)]]

Образец прогона -

In [42]: myarray
Out[42]: 
array([[[1, 1],
        [1, 1],
        [4, 4],
        [4, 4],
        [2, 2],
        [3, 3],
        [1, 1]]])

In [43]: myarray[:,np.r_[True,(myarray[0,1:] != myarray[0,:-1]).any(-1)]]
Out[43]: 
array([[[1, 1],
        [4, 4],
        [2, 2],
        [3, 3],
        [1, 1]]])

Или с помощью сравнения на равенство и затем посмотретьдля ALL матчей -

In [47]: myarray[:,np.r_[True,~((myarray[0,1:] == myarray[0,:-1]).all(-1))]]
Out[47]: 
array([[[1, 1],
        [4, 4],
        [2, 2],
        [3, 3],
        [1, 1]]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...