Удалить дубликаты из массива и элементы в совпадающих позициях в другом массиве - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть два массива numpy, я хочу удалить повторяющиеся значения из первого массива (включая исходное значение) и удалить элементы в совпадающих позициях во втором массиве.

Например:

a = [1, 2, 2, 3]
b = ['a', 'd', 'f', 'c']

Становится:

a = [1, 3]
b = ['a', 'c']

Мне нужно делать это эффективно, а не использовать наивное решение, которое отнимает много времени

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Вот один с np.unique -

unq,idx,c = np.unique(a, return_index=True, return_counts=True)
unq_idx = np.sort(idx[c==1])
a_out = a[unq_idx]
b_out = b[unq_idx]

Пробный прогон -

In [34]: a
Out[34]: array([1, 2, 2, 3])

In [35]: b
Out[35]: array(['a', 'd', 'f', 'c'], dtype='|S1')

In [36]: unq,idx,c = np.unique(a, return_index=1, return_counts=1)
    ...: unq_idx = idx[c==1]
    ...: a_out = a[unq_idx]
    ...: b_out = b[unq_idx]

In [37]: a_out
Out[37]: array([1, 3])

In [38]: b_out
Out[38]: array(['a', 'c'], dtype='|S1')
0 голосов
/ 30 сентября 2018

Поскольку вы открыты для NumPy, вы можете рассмотреть возможность использования Pandas, которая использует NumPy для внутреннего использования:

import pandas as pd

a = pd.Series([1, 2, 2, 3])
b = pd.Series(['a', 'd', 'f', 'c'])

flags = ~a.duplicated(keep=False)
idx = flags[flags].index

a = a[idx].values
b = b[idx].values

Результат:

print(a, b, sep='\n')

array([1, 3], dtype=int64)
array(['a', 'c'], dtype=object)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...