удалить дубликаты 2D numpy.array - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу удалить некоторые «дубликаты» элементов в массиве ниже:

arr = array([[1, 2, 3, 0, 1],
             [0, 0, 0, 1, 0]])

В массиве выше arr[:, 0], arr[:, 3] и arr[:, 4] должны рассматриваться как дубликаты.И наконец, я хочу этот результат:

arr = array([[1, 2, 3],
             [0, 0, 0]])

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вы можете сделать это:

import numpy as np

arr = np.array([[1, 2, 3, 0, 1],
             [0, 0, 0, 1, 0]])
arr_sorted = arr.copy() # copy the array so your input is not sorted
arr_sorted.sort(0) # sort row such as duplicates are in the same order
_, indices = np.unique(arr_sorted, axis=1, return_index=True) # find unique indices
arr_unique = arr[:,indices] # select indices
print(arr_unique)

# [[1 2 3]
#  [0 0 0]]
0 голосов
/ 20 декабря 2018

Если вы можете использовать Панд, вы можете использовать np.sort с pd.DataFrame.duplicated для создания логического индексатора:

import numpy as np
import pandas as pd

arr = np.array([[1, 2, 3, 0, 1],
                [0, 0, 0, 1, 0]])

arr_dups = pd.DataFrame(np.sort(arr.T)).duplicated().values
res = arr[:, ~arr_dups]

print(res)

array([[1, 2, 3],
       [0, 0, 0]])
...